HDU 1878 欧拉回路(判断欧拉回路)
来源:互联网 发布:java技术总监面试题 编辑:程序博客网 时间:2024/04/28 18:56
题意:略
解题思路:判断是否连通, 有没有度为奇数的点。并查集, DFS都可以, 用链式向前星建图会超时, 不知道为什么, 邻接矩阵反而不超时。
欧拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10725 Accepted Submission(s): 3902
Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 31 21 32 33 21 22 30
Sample Output
10
1.
#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<cctype>#include<list>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<vector>using namespace std;#define FOR(i, s, t) for(int i = (s) ; i <= (t) ; ++i)#define REP(i, n) for(int i = 0 ; i < (n) ; ++i)int buf[10];inline long long read(){ long long x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f;}inline void writenum(int i){ int p = 0; if(i == 0) p++; else while(i) { buf[p++] = i % 10; i /= 10; } for(int j = p - 1 ; j >= 0 ; --j) putchar('0' + buf[j]);}/**************************************************************/#define MAX_N 1005const int INF = 0x3f3f3f3f;int G[MAX_N][MAX_N];bool vis[MAX_N];int degree[MAX_N];int n, m;void dfs(int u){ vis[u] = true; for(int i = 1 ; i <= n ; i++) { if(G[u][i] && !vis[i]) { dfs(i); } } return;}inline void init(){ memset(vis, false, sizeof(vis)); memset(G, 0, sizeof(G)); memset(degree, 0, sizeof(degree));}int main(){// int n, m; while(scanf("%d", &n) && n) { init(); scanf("%d", &m); int u, v; for(int i = 0 ; i < m ; i++) { u = read(); v = read(); G[u][v] = G[v][u] = 1; degree[u]++; degree[v]++; } dfs(1); int flag = 0; for(int i = 1 ; i <= n ;i++) { if(degree[i] % 2) { flag = 1; break; } if(!vis[i]) { flag = 1; break; } } if(flag) { printf("0\n");// continue; } else { printf("1\n"); } } return 0;}
2.
#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<cctype>#include<list>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<vector>using namespace std;#define FOR(i, s, t) for(int i = (s) ; i <= (t) ; ++i)#define REP(i, n) for(int i = 0 ; i < (n) ; ++i)int buf[10];inline long long read(){ long long x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f;}inline void writenum(int i){ int p = 0; if(i == 0) p++; else while(i) { buf[p++] = i % 10; i /= 10; } for(int j = p - 1 ; j >= 0 ; --j) putchar('0' + buf[j]);}/**************************************************************/#define MAX_N 1005const int INF = 0x3f3f3f3f;int parent[MAX_N];int degree[MAX_N];inline void init(int n){ memset(degree, 0, sizeof(degree)); for(int i = 1 ; i <= n + 1 ; i++) { parent[i] = i; }}int find(int a){ if(parent[a] != a) { parent[a] = find(parent[a]); } return parent[a];}void unite(int a, int b){ int fa = find(a); int fb = find(b); if(fa == fb) return; parent[fb] = fa;}int same(int a, int b){ return find(a) == find(b);}int main(){ int n, m; while(scanf("%d", &n) && n) { init(n); scanf("%d", &m); for(int i = 0 ; i < m ;i++) { int u = read(); int v = read(); unite(u, v); degree[u]++; degree[v]++; } int flag = 0; for(int i = 1 ;i <= n ;i++) { if(degree[i] % 2) { flag = 1; break; } } if(flag) { printf("0\n"); continue; } int tmp = parent[1]; for(int i = 2 ; i <= n ; i++) { if(tmp != find(i)) { flag = 1; break; } } if(flag) { printf("0\n"); continue; } printf("1\n"); } return 0;}
0 0
- HDU 1878 欧拉回路(判断欧拉回路)
- HDU 1878 欧拉回路(欧拉回路)
- hdu 欧拉回路(判断)
- hdu 1878 欧拉回路(水题,判断欧拉回路)
- HDU NO.1878 欧拉回路(邻接矩阵,判断欧拉回路的条件)
- 欧拉回路判断
- 欧拉回路判断
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- 观察者KVO
- php中self和$this的用法
- myeclipse 10安装svn插件
- C++中unordered_map出现的若干问题详解(找不到库,找不到unorded_map,编译问题)
- ubuntu安装redis
- HDU 1878 欧拉回路(判断欧拉回路)
- Fragment onCreateView inflate注意事项
- HDU 2037 今年暑假不AC 排序+贪心算法
- Git入门
- 超棒的一遍综述性博客
- 白话经典算法系列之五 归并排序的实现
- typedef与define的区别
- MySql之索引
- 迷宫