是否存在欧拉路径问题 POJ - 1386 hihoCoder - 1181
2017-09-16 21:40
453 查看
poj - 1386
//题意: 给出结果字符串, 问他们是否可以头尾相连起来.
//思路: 以每个单词的头和尾作为节点, 每个单词头尾之间连接一条有向边, 最后看是否可以找到一条有向欧拉路径即可. 注意两点:
1: 根据有向欧拉路的判定, 最后cnt最好是标记的入度和出度不等的顶点数, 因为如果有欧拉路, cnt一定等于0. 否则的话做法稍显麻烦.
2: 一定要判当前的图中是否联通. 不联通的话那直接就是NO了.
AC Code
hihoCoder - 1181
题意和思路就不说了, 题面都有,说说几个注意点就是了.
1: 这个是根据点来建的图, 边上是没有东西的, 转化也不容易转化, 又因为要删边, 所以选择使用临接表来存图.
2: 注意两个点之间可能不只一条路.
AC Code
//题意: 给出结果字符串, 问他们是否可以头尾相连起来.
//思路: 以每个单词的头和尾作为节点, 每个单词头尾之间连接一条有向边, 最后看是否可以找到一条有向欧拉路径即可. 注意两点:
1: 根据有向欧拉路的判定, 最后cnt最好是标记的入度和出度不等的顶点数, 因为如果有欧拉路, cnt一定等于0. 否则的话做法稍显麻烦.
2: 一定要判当前的图中是否联通. 不联通的话那直接就是NO了.
AC Code
const int maxn = 100+5; int cas=1; int out[maxn],in[maxn]; int fa[maxn]; int Find(int x) { return fa[x] == x? x: fa[x] = Find(fa[x]); } void solve() { Fill(in,0); Fill(out,0); for(int i=1;i<=26;i++) fa[i] = i; int n; scanf("%d",&n); while(n--){ string s; cin >> s; int len = s.size(); int t1 = s[0]-'a'+1; int t2 = s[len-1]-'a'+1; out[t1]++; in[t2]++; if(Find(t1) != Find(t2)) fa[Find(t2)] = Find(t1); } int tt = 0; int ans1=0,ans2=0; for(int i=1;i<=26;i++){ if(!in[i] && !out[i]) continue; if(Find(i) == i) tt++; //这里还要注意下是找Find(i),而不是fa[i],坑了好久. if(abs(in[i]-out[i]) == 1) ans2++; else if(in[i] != out[i]) ans1++; } if(ans1 == 0 && (ans2 == 0 || ans2 == 2) && tt == 1) puts("Ordering is possible."); else puts("The door cannot be opened."); }
hihoCoder - 1181
题意和思路就不说了, 题面都有,说说几个注意点就是了.
1: 这个是根据点来建的图, 边上是没有东西的, 转化也不容易转化, 又因为要删边, 所以选择使用临接表来存图.
2: 注意两个点之间可能不只一条路.
AC Code
const int maxn = 1e3+5; int cas=1; int du[maxn],path[maxn]; int mapp[maxn][maxn]; int n,m,top=0; void dfs(int u) { for(int i=1;i<=n;i++){ if(mapp[u][i]){ mapp[u][i]--; mapp[i][u]--; dfs(i); } } path[top++] = u; } void solve() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int u,v; scanf("%d%d",&u,&v); mapp[u][v]++; mapp[v][u]++; du[u]++; du[v]++; } int flag = 1; for(int i=1;i<=n;i++){ if(du[i] & 1) { dfs(i); flag = 0; break; } } if(flag) dfs(1); for(int i=0;i<top;i++){ printf("%d%c",path[i],i==top-1?'\n':' '); } }
相关文章推荐
- poj 1386 Play on Words(欧拉路径存在的判断问题)
- 迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点
- 华为题目(寻找是否存在路径问题)。。。2014.5.9
- MapReduce 判断输出路径是否存在问题
- POJ 1386 Play on Words(判定图欧拉通路是否存在)(并查集+有向图存在欧拉路)
- poj 1300 Door Man 无向图欧拉路径存在判断
- 运行Android应用时提示ADB是否存在于指定路径问题
- 欧拉路径问题 (附POJ 1041 POJ 2337)
- 欧拉路径问题【poj 1637 Sightseeing tour】
- 运行Android应用时提示ADB是否存在于指定路径问题
- poj1860(求是否存在大于0的路径,spfa算法) Currency Exchange
- HDOJ 1116/POJ 1386 - Play on Words 判断有向图哈密顿通路转化为判断有向图是否存在欧拉通路
- 关于深搜和广搜在图中两点间是否存在路径问题上的工作效率情况探讨~
- poj 2114 树分治(是否存在长度恰为k的路径)
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,判断是否存在负权回路)
- 打印欧拉路径问题 hihoCoder - 1182 POJ - 1392 POJ 1780 POJ - 2237
- POJ 1386 Play on Words(判定图欧拉通路是否存在)
- 解决MVC中检查用户名是否存在的问题
- POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】