有向图的欧拉道路 UVA
来源:互联网 发布:苹果六怎么备份数据 编辑:程序博客网 时间:2024/03/29 02:26
//有向图的欧拉道路#include<iostream>#include<cstdio>#include<cstring> using namespace std;const int maxn=30;int vis[maxn],f[maxn],in[maxn],out[maxn];//vis为有向图的节点,f为并查集,in入度,out节点出度void init(){ memset(vis,0,sizeof(vis)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=0;i<=26;i++) f[i]=i;}int F(int x){//并查集 return f[x]==x?x:f[x]=F(f[x]);}void unit(int a,int b){ int x1=F(a),y1=F(b); if(x1!=y1)f[x1]=y1;}int main(){ int T,N; cin>>T; while(T--){ init(); cin>>N; string s; while(N--){ cin>>s; int a=s[0]-'a',b=s[s.size()-1]-'a'; out[a]++,in[b]++;//a的出度加一,b的入度加一 vis[a]=1,vis[b]=1;//ab为点 unit(a,b);//ab为一个类 } int cnt=0; for(int i=0;i<=26;i++) if(vis[i]&&F(i)==i) cnt++;//类个数 if(cnt>1){//类个数大于一不行 cout<<"The door cannot be opened."<<endl; continue; } int mk1=0,mk2=0,jud=1; for(int i=0;i<=26;i++){//有向图的欧拉路必须一个点入度比出度大一,另一个相反 if(vis[i]&&in[i]!=out[i]){ if(in[i]+1==out[i]&&!mk1)mk1=1; else if(in[i]==out[i]+1&&!mk2)mk2=1; else jud=0; } } if(jud)cout<<"Ordering is possible."<<endl; else cout<<"The door cannot be opened."<<endl; } return 0;}
0 0
- 有向图的欧拉道路 UVA
- 有向图的欧拉回路及欧拉道路
- 10129 - Play on Words(欧拉道路<有向图>)
- UVa 10596 - Morning Walk 有向图的欧拉回路
- 有向图,无向图的欧拉回路和欧拉通路poj 2337
- uva10129 Play On words (有向欧拉道路存在性)
- UVA 10441 - Catenyms(欧拉道路)
- POJ 2337 有向图的欧拉路径
- POJ 1386 有向图的欧拉路径
- 单词拼接(有向图的欧拉回路)
- UVA 10054 无向图的欧拉回路输出路径
- UVA 10596 Morning Walk[无向图的欧拉回路]
- UVa 10129 - Play on Words, 欧拉道路
- uva 10129 Play on Words(欧拉道路)
- UVa 10129 - Play on Words 欧拉道路
- Uva 10129 Play on Words(欧拉道路)
- UVa 12118 - Inspector's Dilemma <欧拉道路+DFS>
- UVa 10129 - Play on Words(欧拉道路)
- 字符串匹配
- 用Criteria进行模糊查询实现简单的搜索功能
- CodeForces
- leetcode---Product of Array Except Self
- 向上转型和向下转型
- 有向图的欧拉道路 UVA
- Leetcode题解:513. Find Bottom Left Tree Value
- RHEL6.5 LVM硬盘管理
- leetcode508
- 1091. Acute Stroke (30)[bfs广度优先搜索+种子填充]
- 64位MinGW和MSYS的安装
- java集合
- 数据挖掘---关联规则---ECLAT算法
- 启动关闭一个网络接口时的连带效应