POJ 2230 Watchcow( 欧拉回路 )
来源:互联网 发布:linux proc 共享内存 编辑:程序博客网 时间:2024/06/02 23:20
题意:给定一张一定有解的图, 求每条边遍历不同方向两次再回到起点1,打印所经过的点。
解题思路:简单欧拉回路,因为已经确保是有解的, 所以不用判断连通性和是否为欧拉图,直接套模板就行了,每条边正反存两条就行了。
问题描述
Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the farm and make sure that no evildoers are doing any evil. She begins at the barn, makes her patrol, and then returns to the barn when she's done.
If she were a more observant cow, she might be able to just walk each of M (1 <= M <= 50,000) bidirectional trails numbered 1..M between N (2 <= N <= 10,000) fields numbered 1..N on the farm once and be confident that she's seen everything she needs to see. But since she isn't, she wants to make sure she walks down each trail exactly twice. It's also important that her two trips along each trail be in opposite directions, so that she doesn't miss the same thing twice.
A pair of fields might be connected by more than one trail. Find a path that Bessie can follow which will meet her requirements. Such a path is guaranteed to exist.
If she were a more observant cow, she might be able to just walk each of M (1 <= M <= 50,000) bidirectional trails numbered 1..M between N (2 <= N <= 10,000) fields numbered 1..N on the farm once and be confident that she's seen everything she needs to see. But since she isn't, she wants to make sure she walks down each trail exactly twice. It's also important that her two trips along each trail be in opposite directions, so that she doesn't miss the same thing twice.
A pair of fields might be connected by more than one trail. Find a path that Bessie can follow which will meet her requirements. Such a path is guaranteed to exist.
输入
* Line 1: Two integers, N and M.
* Lines 2..M+1: Two integers denoting a pair of fields connected by a path.
* Lines 2..M+1: Two integers denoting a pair of fields connected by a path.
输出
* Lines 1..2M+1: A list of fields she passes through, one per line, beginning and ending with the barn at field 1. If more than one solution is possible, output any solution.
样例输入
4 51 21 42 32 43 4
样例输出
12342143241
提示
OUTPUT DETAILS:
Bessie starts at 1 (barn), goes to 2, then 3, etc...
Bessie starts at 1 (barn), goes to 2, then 3, etc...
#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 10005#define MAX_M 50005const int INF = 0x3f3f3f3f;int head[MAX_N];int vis[MAX_M<<1];int ans[MAX_M<<1];int iq = 0;struct node{ int to, next;} edge[MAX_M << 1];int top = 0;inline void init(){ memset(head, -1, sizeof(head)); memset(vis, 0, sizeof(vis)); top = 0; iq = 0;}void add_edge(int u, int v){ edge[top].to = v; edge[top].next = head[u]; head[u] = top++;}void dfs(int now){ for(int k = head[now] ; k != -1 ; k = edge[k].next) { if(!vis[k]) { vis[k] = 1; dfs(edge[k].to); ans[iq++] = edge[k].to; } }}int main(){ int n, m; while(~scanf("%d%d", &n, &m)) { init(); int u, v; for(int i = 0 ; i < m ; i++) { u = read(); v = read(); add_edge(u, v); add_edge(v, u); } dfs(1);// cout<<1<<endl; for(int i = 0 ; i < iq ; i++) { printf("%d\n", ans[i]); } printf("1\n"); } return 0;}
0 0
- POJ 2230 Watchcow 【欧拉回路】
- poj 2230 Watchcow (DFS + 欧拉回路)
- poj 2230 Watchcow(欧拉回路)
- poj - 2230 - Watchcow(欧拉回路)
- POJ 2230 Watchcow 欧拉回路题解
- [欧拉回路] poj 2230 Watchcow
- POJ 2230 Watchcow(欧拉回路)
- POJ 2230 Watchcow (欧拉回路)
- poj 2230 Watchcow 欧拉回路
- POJ 2230 Watchcow (欧拉回路)
- POJ 2230 Watchcow( 欧拉回路 )
- POJ 2230 Watchcow (欧拉回路)
- Poj 2230 Watchcow【欧拉回路】
- poj 2230 Watchcow(欧拉回路)
- POJ 2230 Watchcow 欧拉回路
- POJ 2230 Watchcow(欧拉回路+DFS)
- POJ 2230 - Watchcow 输出欧拉回路点的路径...
- POJ 2230 Watchcow(欧拉回路:输出点轨迹)
- HDU 1248 寒冰王座
- My first Hibernate app
- Java小兵之路—获取指定月份的天数
- java中静态代码块的用法 static用法详解
- UITableView隐藏多余的分割线
- POJ 2230 Watchcow( 欧拉回路 )
- H5火了 “吴亦凡即将入伍?!”创作团队讲述创意完整过程
- The following classes could not be instantiated: - android.support.v7.widget.Toolbar 解决方法
- linux的5个查找命令
- 零碎知识点
- python_基础05
- 如何在 windows 平台安装 GNU 环境?
- How Garbage Collection Really Works
- 关于本博客和本人的说明