HDU——1116解题报告
来源:互联网 发布:淘宝蚂蚁花呗怎么关闭 编辑:程序博客网 时间:2024/06/06 10:49
这一题也是让我纠结了好久,首先判断是否为一个图,用并查集判断,之后若是一个图,则判断是否为欧拉回路或欧拉通路,欧拉回路即每个顶点出度和入度相等,欧拉通路即只有一个顶点出度比入度大1,一个入度比出度大1,其余相等,但是为什么在并查集合并的时候交换顺序就WA了呢,我对并查集也不是理解的很深,难道元素的顺序还影响并查集的合并结果??牛人快来解答一下啊。代码如下:
#include <iostream>#include <string>#include <cstring>using namespace std;const int maxn=1<<5;int set[maxn],in[maxn],out[maxn];int find(int x){ if(set[x]==x) return x; else return find(set[x]);}int main(){ int t; cin>>t; while(t--){ int n; string t; cin>>n; for(int i=1;i<=maxn;i++) set[i]=i; memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=1;i<=n;i++){ int a,b; t.clear(); cin>>t; a=t[0]-'a'+1; b=t[t.size()-1]-'a'+1; if(find(a)!=find(b)) set[b]=a; //就是这里,换成set[a]=b就会WA,WHY?????? in[a]++; out[b]++; } int nset=0; for(int i=1;i<=26;i++) if(set[i]==i&&(in[i]||out[i])) nset++; if(nset>1) {cout<<"The door cannot be opened.\n";continue;} int nc=0,nr=0,e=0; for(int i=1;i<=26;i++){ if(in[i]-out[i]==1) nr++; else if(out[i]-in[i]==1) nc++; else if(in[i]!=out[i]) e++; } if(nr==1&&nc==1&&e==0) cout<<"Ordering is possible.\n"; else if(nr==0&&nc==0&&e==0) cout<<"Ordering is possible.\n"; else cout<<"The door cannot be opened.\n"; } return 0;}
0 0
- HDU——1116解题报告
- HDU解题报告——1012
- HDU解题报告——1008
- HDU解题报告——1009
- HDU解题报告——1014
- HDU解题报告——1018
- HDU解题报告——1019
- HDU解题报告——1021
- HDU解题报告——1027
- HDU解题报告——1030
- HDU解题报告——1032
- HDU解题报告——1038
- HDU解题报告——1041
- HDU解题报告——1046
- HDU解题报告——1050
- HDU解题报告——1236
- HDU解题报告——2673
- HDU解题报告——1106
- Perl-LWP文档
- java中的多线程
- VMware 提示虚拟机正在使用中,无法启动虚拟机
- linux vncserver 远控
- Sdut 2416 Fruit Ninja II(山东省第三届ACM省赛 J 题)(解析几何)
- HDU——1116解题报告
- java.toString
- Single Number
- 面向服务与微服务架构
- 重装sql server
- LeetCode刷题笔录Unique Binary Search Trees
- metaio AR 官方教学视频 Edge Based Initialization and Tracking
- arm 体系的汇编
- 关于指针变量的问题