poj2230 贝茜巡逻
来源:互联网 发布:深圳冰川网络招聘 编辑:程序博客网 时间:2024/04/19 05:41
【问题描述】
FJ有 N 个农场,他们由 M 条双向道路连接。贝茜从农场出发巡逻。每条路必须由两个方向各走一遍,最后回到农场1。题目保证有这样的路径存在。
请输出这样的路径。
【输入格式】
第一行输入N和M,之后M行输入一条路径的两个端点。
【输出格式】
输出经过的农场,一行一个(字典序最小的)。
【输入样例】
4 5
1 2
1 4
2 3
2 4
3 4
【输出样例】
1
2
1
4
2
3
2
4
3
4
1
【数据范围】
2<=N<=10000 , 1<=M<=50000
这道题直接把每条无向边看成两条有向边,存储2次找欧拉路径,值得注意的是这里没一个点的度都为偶数,所以直接从1开始就可以了。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>using namespace std;const int maxn=10005;struct shu{ int v,id;};vector<shu>a[maxn];int n,m,du[maxn];vector<int>d;int vis[100005];bool my(shu x,shu y){ return x.v<y.v;}void init(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); a[x].push_back((shu){y,i}); a[y].push_back((shu){x,i+m}); } for(int i=1;i<=n;i++) sort(a[i].begin(),a[i].end(),my);}void dfs(int i){ for(int j=0;j<a[i].size();j++) { if(vis[a[i][j].id]) continue; int t=a[i][j].v; vis[a[i][j].id]=1; dfs(t); } d.push_back(i);}int main(){ memset(du,0,sizeof(du)); memset(vis,0,sizeof(vis)); init(); int s=1; dfs(s); for(int i=d.size()-1;i>=0;i--) printf("%d\n",d[i]); return 0;}
1 0
- poj2230 贝茜巡逻
- POJ2230
- POJ2230
- poj2230
- poj2230
- poj2230欧拉图
- POJ2230题解
- poj2230 Watchcow
- poj2230 解题报告
- poj2230欧拉回路+DFS
- POJ2230 Watchcow【欧拉回路】
- POJ2230 Watchcow(欧拉回路)
- 【poj2230】Watchcow——dfs
- poj2230 Watchcow (欧拉回路)
- 执行网络巡逻
- APIO2010 巡逻 树形DP
- [Apio2010]patrol 巡逻
- APIO2010 T2 巡逻
- 自己动手写线程池之锁的管理
- JS面试题集锦
- MPEG系列标准介绍
- Android基础-1
- 一个五年Android 开发者百度、阿里、聚美、映客的面试心经
- poj2230 贝茜巡逻
- 自己动手写线程池之线程池实现
- 数据结构 -->线性表的链式实现 ADT
- iOS architecture and framework(Stanford class 1)
- 每日一题(day3)
- 视频
- Myeclipse 自动Debug sun.misc.URLClassPath解决办法
- 7Cookie的使用
- Netty初学之一:简介-HellWord-讲解