牛客网 牛客小白月赛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 }

 

 

 

posted @ 2018-04-23 22:26  ZERO-  阅读(184)  评论(0编辑  收藏  举报