uva 10596 Morning Walk

来源:互联网 发布:淘宝贷利息多少 编辑:程序博客网 时间:2024/04/30 21:24

简单的无向图欧拉回路判定

#include <stdio.h>int myset[10001]; //并查集int set_len[10001];int d[10001];void init_set(int n){for(int i=0; i<n; i++){myset[i] = i;set_len[i] = 1;d[i] = 0;}}int get_root(int i){int root;int p, root_temp;root = i;while(myset[root] != root)root = myset[root];p = i;while(1){if(myset[p] == root)break;root_temp = myset[p];myset[p] = root;p = root_temp;}return root;}void merge(int i, int j){int root_a, root_b;root_a = get_root(i);root_b = get_root(j);if(root_a == root_b)return;set_len[root_b] += set_len[root_a];set_len[root_a] = 0;myset[root_a] = root_b;}void func(int m, int n){bool f;if(set_len[get_root(0)] != m) //不是连通图{printf("Not Possible\n");return;}f = true;for(int i=0; i<=m; i++)if(d[i]%2){f = false;break;}if(f)printf("Possible\n");elseprintf("Not Possible\n");}int main(void){int m, n, i;int p1, p2;//freopen("input.dat", "r", stdin);while(scanf("%d %d",&m,&n) != EOF){init_set(n);for(i=1; i<=n; i++){scanf("%d %d", &p1, &p2);d[p1]++; d[p2]++;merge(p1, p2);}func(m, n);}}


原创粉丝点击