hdu 1116(并查集+欧拉路判断)
来源:互联网 发布:安卓数据库 编辑:程序博客网 时间:2024/05/18 13:31
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116
思路:先合并,然后判断根结点是否唯一,如果是,则在判断是否是欧拉路;否则,直接结束。
View Code
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int MAXN=100000+10; 6 int In[MAXN],Out[MAXN]; 7 int parent[MAXN]; 8 bool mark[MAXN]; 9 int n;10 11 12 void Initiate(){13 for(int i=0;i<n;i++){14 parent[i]=-1;15 }16 }17 18 int Find(int x){19 int s;20 for(s=x;parent[s]>=0;s=parent[s]);21 while(s!=x){22 int tmp=parent[x];23 parent[x]=s;24 x=tmp;25 }26 return s;27 }28 29 void Union(int R1,int R2){30 int r1=Find(R1);31 int r2=Find(R2);32 if(r1!=r2){33 parent[r1]=r2;34 }35 }36 37 int main(){38 int _case;39 scanf("%d",&_case);40 while(_case--){41 scanf("%d",&n);42 Initiate();43 memset(mark,false,sizeof(mark));44 memset(In,0,sizeof(In));45 memset(Out,0,sizeof(Out));46 for(int i=0;i<n;i++){47 char str[1010];48 scanf("%s",str);49 int x=str[0]-'a';50 int y=str[strlen(str)-1]-'a';51 Union(x,y);52 mark[x]=mark[y]=true;53 Out[x]++;54 In[y]++;55 }56 int count=0;57 for(int i=0;i<26;i++){58 if(mark[i]&&parent[i]==-1){59 count++;60 }61 }62 if(count>1){63 printf("The door cannot be opened.\n");64 }else {65 int p[27];66 int k=0;67 for(int i=0;i<26;i++){68 if(mark[i]&&In[i]!=Out[i]){69 p[k++]=i;70 }71 }72 if(k==0){73 printf("Ordering is possible.\n");74 }else {75 if(k==2&&abs(In[p[0]]-Out[p[0]])==1&&abs(In[p[1]]-Out[p[1]])==1){76 printf("Ordering is possible.\n");77 }else 78 printf("The door cannot be opened.\n");79 }80 }81 }82 return 0;83 }
0 0
- hdu 1116(并查集+欧拉路判断)
- hdu 1116 Play on Word【并查集+欧拉路判断】
- HDU 1558 (并查集+判断线段相交)
- hdu 1198(并查集判断连通性)
- hdu 1116 欧拉路 + 并查集
- hdu 3018(欧拉路+并查集)
- hdu 1116 并查集
- HDU 1116 并查集
- hdu 1116并查集
- HDU 1272 HDU 1308&&POJ 1308(树的判断)(并查集)
- hdu 1558 线段相交判断 + 并查集
- hdu 1558 并查集 加 判断线段相交
- HDU 1325(并查集判断一个图是否是一棵树)
- hdu 1558 判断线段相交 + 并查集
- hdu 1325 并查集 判断是不是一颗树
- hdu 1272 并查集判断树的构成
- HDU 1558 Segment set(判断线段相交+并查集)
- HDU 1558 判断两个线段相交附带并查集
- hdu 2377
- hdu 2962(最短路+二分)
- hdu 3191+hdu 1688(最短路+次短路)
- hdu 3986(最短路+枚举)
- linux性能分析 sar 命令详解
- hdu 1116(并查集+欧拉路判断)
- IOS 画图总结
- hdu 1181(并查集+拓扑排序)
- 应用程序与内核模块的比较
- hdu 1829+hdu 1856(并查集)
- 几种算法的C实现
- hdu 2473
- hdu 3172+hdu 3635+hdu 3926
- hdu 1050+hdu 1789+hdu 3177(贪心)