码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj 一笔画问题 (判断欧拉路径)

时间:2015-03-12 13:11:40      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

无向图判断欧拉路径只要:

1.图为连通图(并查集处理)

2.奇数度为0或2

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<map>
 9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<cmath>
13 #include<stdlib.h>
14 #include<vector>
15 #include<stack>
16 #include<set>
17 using namespace std;
18 #define INF 1000000007
19 #define MAXN 4010
20 #define Mod 1000007
21 #define N 100010
22 #define NN 30
23 #define sigma_size 3
24 const int MAX = 1000100;
25 const int maxn = 6e5 + 10;
26 using namespace std;
27 typedef long long LL;
28 
29 
30 int T;
31 int n, m;
32 int u, v;
33 int fa[1111];
34 int deg[1111], one, tot;
35 
36 int findset(int x)
37 {
38     if (fa[x] == x) return x;
39     return fa[x] = findset(fa[x]);
40 }
41 
42 void merg(int a, int b)
43 {
44     int x = findset(a);
45     int y = findset(b);
46     if (x != y) {
47         fa[x] = y;
48     }
49 }
50 int main()
51 {
52     scanf("%d",&T);
53     while (T--) {
54         cin >> n >> m;
55         one = 0, tot = 0;
56         for (int i = 0; i <= n; ++i) {
57             fa[i] = i;
58         }
59         memset(deg,0,sizeof(deg));
60         for (int i = 0; i < m; ++i) {
61             scanf("%d%d", &u, &v);
62             deg[v]++, deg[u]++;
63             merg(u,v);
64         }
65         for (int i = 1; i <= n; ++i) {
66             if (deg[i] & 1) one++;
67             if (fa[i] == i) tot++;
68         }
69         if (tot == 1 && (one == 0 || one == 2))
70             puts("Yes");
71         else 
72             puts("No");
73     }
74     //system("pause");
75     return 0;
76 }

 

nyoj 一笔画问题 (判断欧拉路径)

标签:

原文地址:http://www.cnblogs.com/usedrosee/p/4332027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!