POJ 1300 - 阅读理解+恶心输入+欧拉回路
2012-09-14 22:10
477 查看
题意不太好理解....大致上: 是从某个指定的房间出发...问能否回到0房间...并且关掉图中所有的门..而门是关上后无法打开的...
输入比较奇葩..我是gets读入一行后再处理的...
再抽象一些...把门开作边..那么相当于找一条路径..使得便利所有的边..且每个边只遍历一次...这里分为两种情况..一种是从0出发..走完所有的边回到0...这是典型的欧拉回路...另一种是从其他点出发..到达0点..并且走完所有的边..
判断一个图能否存在欧拉回路..就是看所有点的度是否为偶数...因为所有的点必定都是进入多少次就要出去多少次...而只是一条路路径而非回路..那么起点和终点必须是奇数的度..而其他的点的度必须为偶数...
Program:
输入比较奇葩..我是gets读入一行后再处理的...
再抽象一些...把门开作边..那么相当于找一条路径..使得便利所有的边..且每个边只遍历一次...这里分为两种情况..一种是从0出发..走完所有的边回到0...这是典型的欧拉回路...另一种是从其他点出发..到达0点..并且走完所有的边..
判断一个图能否存在欧拉回路..就是看所有点的度是否为偶数...因为所有的点必定都是进入多少次就要出去多少次...而只是一条路路径而非回路..那么起点和终点必须是奇数的度..而其他的点的度必须为偶数...
Program:
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<map> #include<queue> #include<stack> #define ll long long #define oo 1000000000 #define pi acos(-1) using namespace std; int m,n,ans,a[105]; char s[505]; int main() { int p,len,i,k; while (~scanf("%s",s)) { if (s[0]!='S') break; scanf("%d%d",&m,&n); gets(s); memset(a,0,sizeof(a)); ans=0; for (p=0;p<n;p++) { gets(s); len=strlen(s); i=0; while (i<len) { k=0; while (s[i]>='0' && s[i]<='9') { k=k*10+s[i]-'0'; i++; } if (k) { a[p]++; a[k]++; ans++; k=0; } i++; } } gets(s); k=0; for (i=0;i<n;i++) if (a[i]%2) k++; if (!m) { if (!k) printf("YES %d\n",ans); else printf("NO\n"); }else { if (k==2 && a[m]%2 && a[0]%2) printf("YES %d\n",ans); else printf("NO\n"); } } return 0; }
相关文章推荐
- Poj 1300 Door Man (欧拉回路 通路 stream处理输入)
- poj 1300 Door Man(欧拉回路判定)
- 欧拉回路的判定 poj 1300
- [欧拉回路] poj 1300 Door Man
- poj 1300 Door Man(欧拉回路判定)
- POJ 1300 Door Man 欧拉回路的判定
- POJ 2062 & HDOJ 1528 Card Game Cheater - 阅读理解..二分图最大匹配
- POJ 2209(阅读理解)
- POJ 1300 判断欧拉回路
- poj1300 Door Man(欧拉回路)
- poj 1300 欧拉回路判定方法
- POJ-1300 Door Man 欧拉回路判定
- POJ 3648 - Wedding...阅读理解.题意坑爹.2-sat..细节注意
- POJ 1300 Door Man(欧拉回路判定)
- POJ 1300 判断欧拉回路
- POJ 1300 Door Man(欧拉回路的判定)
- POJ 1300 欧拉通路&欧拉回路
- POJ 1300 欧拉通路&欧拉回路
- POJ 1300 Door Man(欧拉回路判定)
- poj 1300 欧拉回路、通路 解题报告