欧拉回路 hdu1878
来源:互联网 发布:第三方数据监测公司 mt 编辑:程序博客网 时间:2024/04/27 20:16
无向图的欧拉回路判断裸题,(不允许有孤立点)
判断条件:图是连通的,且每个点的度为偶数个。
dfs:
//#pragma warning (disable: 4786)//#pragma comment (linker, "/STACK:16777216")//HEAD#include <cstdio>#include <ctime>#include <cstdlib>#include <cstring>#include <queue>#include <string>#include <set>#include <stack>#include <map>#include <cmath>#include <vector>#include <iostream>#include <algorithm>using namespace std;//LOOP#define FE(i, a, b) for(int i = (a); i <= (b); ++i)#define FD(i, b, a) for(int i = (b); i>= (a); --i)#define REP(i, N) for(int i = 0; i < (N); ++i)#define CLR(A,value) memset(A,value,sizeof(A))#define CPY(a, b) memcpy(a, b, sizeof(a))#define FC(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)//INPUT#define RI(n) scanf("%d", &n)#define RII(n, m) scanf("%d%d", &n, &m)#define RIII(n, m, k) scanf("%d%d%d", &n, &m, &k)#define RS(s) scanf("%s", s)typedef long long LL;const int INF = 1000000007;const double eps = 1e-10;const int maxn = 1010;int n, m;int du[maxn];bool vis[maxn];vector<int>adj[maxn];int dfs(int u){ int ret = 1; vis[u] = 1; REP(i, adj[u].size()) { int r = adj[u][i]; if (!vis[r]) ret += dfs(r); } return ret;}int main (){ int x, y; while (cin >> n && n) { cin >> m; CLR(vis, 0); CLR(du, 0); for (int i = 0; i <= n; i++) adj[i].clear(); for (int i = 0; i < m; i++) { RII(x, y); du[x]++; du[y]++; adj[x].push_back(y); adj[y].push_back(x); } int sum = 0;///记录连通分量个数(可虑和不考虑两种情况) for (int i = 1; i <= n; i++) { if (!vis[i] && dfs(i) ) sum++;///题目不允许孤立点。 dfs(i)==1时允许有孤立点 } if (sum != 1) puts("0"); else { int sum_old = 0;///记录奇数度的点的个数 for (int i = 1; i <= n; i++) { if (du[i] % 2) sum_old++; } if (!sum_old) puts("1");///欧拉路径改为sum_old == 0 || sum_old == 2 else puts("0"); } } return 0;}
并查集:
//#pragma warning (disable: 4786)//#pragma comment (linker, "/STACK:16777216")//HEAD#include <cstdio>#include <ctime>#include <cstdlib>#include <cstring>#include <queue>#include <string>#include <set>#include <stack>#include <map>#include <cmath>#include <vector>#include <iostream>#include <algorithm>using namespace std;//LOOP#define FE(i, a, b) for(int i = (a); i <= (b); ++i)#define FD(i, b, a) for(int i = (b); i>= (a); --i)#define REP(i, N) for(int i = 0; i < (N); ++i)#define CLR(A,value) memset(A,value,sizeof(A))#define CPY(a, b) memcpy(a, b, sizeof(a))#define FC(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)//INPUT#define RI(n) scanf("%d", &n)#define RII(n, m) scanf("%d%d", &n, &m)#define RIII(n, m, k) scanf("%d%d%d", &n, &m, &k)#define RS(s) scanf("%s", s)typedef long long LL;const int INF = 1000000007;const double eps = 1e-10;const int maxn = 1010;int n, m;int du[maxn];int fa[maxn];int num[maxn];void init(int n){ for (int i = 0; i <= n; i++) { fa[i] = i; num[i] = 1; }}int find(int x){ return x == fa[x] ? x : fa[x] = find(fa[x]);}int main (){ int x, y; while (cin >> n && n) { cin >> m; CLR(du, 0); init(n); for (int i = 0; i < m; i++) { RII(x, y); du[x]++; du[y]++; int fax = find(x); int fay = find(y); if (fax != fay) { fa[fax] = fay; num[fay] += num[fax]; } } int sum = 0;///记录连通分量个数(可虑和不考虑两种情况) for (int i = 1; i <= n; i++) { if (find(i) == i && num[i] ) sum++;///题目不允许孤立点。 num[i]==1时允许有孤立点 } if (sum != 1) puts("0"); else { int sum_old = 0;///记录奇数度的点的个数 for (int i = 1; i <= n; i++) { if (du[i] % 2) sum_old++; } if (!sum_old) puts("1");///欧拉路径改为sum_old == 0 || sum_old == 2 else puts("0"); } } return 0;}
0 0
- 欧拉回路 hdu1878
- hdu1878欧拉回路
- hdu1878 欧拉回路
- 欧拉回路((hdu1878))
- HDU1878欧拉回路
- 欧拉回路 hdu1878
- HDU1878欧拉回路
- hdu1878 欧拉回路
- hdu1878 欧拉回路
- HDU1878 欧拉回路
- hdu1878 欧拉回路
- hdu1878 欧拉回路
- HDU1878 欧拉回路
- HDU1878 欧拉回路
- HDU1878-欧拉回路
- HDU1878 欧拉回路【欧拉回路】
- hdu1878之欧拉回路
- hdu1878欧拉回路【并查集】
- 【视频处理工程】7、一个基于LavFilter的对话框视频播放器
- Struts2和Spring整合实例【转】
- xor值最大-c#求解-英雄会在线编程题目
- 计算机网络
- linux mint安装金山快盘
- 欧拉回路 hdu1878
- Fedora 19(64位)安装配置lamp(linux下apache+mysql+php)
- 我相信,我们会苦尽甘来
- SVN中 “containing working copy admin area is missing” 问题 .
- 【百度地图开发之三】百度地图UI控制功能讲解
- 多线程GCD的使用
- python代码中加入中文报错
- 《Ext JS 4.2实战》
- 神奇的空格