PAT(A)-1126. Eulerian Path (25)(欧拉图的判断)
2017-03-07 20:35
357 查看
记录一个菜逼的成长。。
题目链接
题目大意:
给你一个图,判断是欧拉回路,还是不是欧拉回路的欧拉通路,还是不是欧拉图。
1.先判断是不是连通图,并查集维护一下
2.判断奇数点得个数,不是0就是2.0是回路,2是通路。
题目链接
题目大意:
给你一个图,判断是欧拉回路,还是不是欧拉回路的欧拉通路,还是不是欧拉图。
1.先判断是不是连通图,并查集维护一下
2.判断奇数点得个数,不是0就是2.0是回路,2是通路。
#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) typedef long long LL; const int INF = 0x3f3f3f3f; const int maxn = 500 + 10; int ans,d[maxn],n,m,pre[maxn]; int findr(int x) { return pre[x] == x ? pre[x] : pre[x] = findr(pre[x]); } void unio(int x,int y) { int fx = findr(x),fy = findr(y); if(fx != fy){ pre[fx] = fy; } } int main() { while(~scanf("%d%d",&n,&m)){ for( int i = 1; i <= n; i++ )pre[i] = i; for( int i = 0; i < m; i++ ){ int u,v; scanf("%d%d",&u,&v); unio(u,v); d[u]++,d[v]++; } int odd = 0,flag = 0,root = findr(1); for( int i = 1; i <= n; i++ ){ if(d[i] & 1)odd++; if(findr(i) != root)flag = 1; printf("%d%c",d[i],i!=n?' ':'\n'); } if(flag){puts("Non-Eulerian");return 0;} if(odd != 0 && odd != 2)puts("Non-Eulerian"); else { if(odd == 2)puts("Semi-Eulerian"); else puts("Eulerian"); } } return 0; }
相关文章推荐
- PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性
- PAT1126. Eulerian Path (25) 判断图是否连通,求各点的度
- PAT (Advanced Level) Practise 1126 Eulerian Path (25)
- PAT 1126. Eulerian Path (25)-甲级
- PAT - 甲级 - 1126. Eulerian Path (25)
- PAT 1126. Eulerian Path (25)
- PAT_A 1126. Eulerian Path (25)
- PAT (Advanced Level) 1126. Eulerian Path (25) 解题报告
- 【PAT-A】1126. Eulerian Path (25)
- PAT (Advanced Level) Practise 1126 Eulerian Path (25)
- PAT:1126. Eulerian Path (25)
- 1126. Eulerian Path (25) PAT 甲级
- PAT (Advanced Level) 1126. Eulerian Path (25)
- PAT 1126. Eulerian Path (25)
- 【PAT】【Advanced Level】1126. Eulerian Path (25)
- PAT甲级 1126. Eulerian Path (25)
- pat 甲1126. Eulerian Path (欧拉图的判定)
- PAT 甲级 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)