牛客网 牛客小白月赛2 D.虚虚实实-无向图判欧拉路径
D.虚虚实实
这个题是无向图判欧拉路径,首先要判是否连通,然后再判欧拉路径就可以,板子题。
板子来源:传送门
代码:
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<cstdlib>
6 #include<algorithm>
7 #include<queue>
8 #include<vector>
9 #include<stack>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e5+10;
13 const double eps=1e-7;
14 #include<stdio.h>
15 #include<string.h>
16 int q[2010],q1[2010],n;
17 int zhaodie(int a){
18 while(q[a]!=a)
19 a=q[a];
20 return a;
21 }
22 void merge1(int a2,int b2){
23 int a1=zhaodie(a2);
24 int b1=zhaodie(b2);
25 if(a1!=b1){
26 q[a1]=b1;
27 for(int i=1; i<=n; i++)
28 if(q[i]==a2||q[i]==a1)
29 q[i]=b1;
30 }
31
32 }
33 int main(){
34 int t;
35 cin>>t;
36 while(t--){
37 memset(q1,0,sizeof(q1));
38 int m;
39 cin>>n>>m;
40 for(int i=1; i<=n; i++)
41 q[i]=i;
42 int u,v;
43 for(int i=0; i<m; i++){
44 scanf("%d%d",&u,&v);
45 merge1(u,v);
46 q1[u]++;
47 q1[v]++;
48 }
49 int e=q[1];
50 int flag=0;
51 for(int i=2; i<=n; i++){
52 if(q[i]!=e){
53 flag=1;
54 break;
55 }
56 }
57 int sum=0;
58 for(int i=1; i<=n; i++){
59 if(q1[i]&1)
60 sum++;
61 }
62 if((sum==0||sum==2)&&!flag)
63 cout<<"Zhen"<<endl;
64 else
65 cout<<"Xun"<<endl;
66 }
67 return 0;
68 }