【题解】【欧拉图】世界人民大团结
2017-04-01 13:33
246 查看
世界人民大团结
Time Limit: 1000 ms Memory Limit:128 MB
Description
现在,世界的主题是和平与发展。社会学博士老Z认为,要实现和平发展,首先要实现世界人民大团结。世界上有n个人。他们胸前和背后各有一个自然数,大于或等于0且小于或等于6。两个身上带有某个相同数字的人把身上相同的数字合在一起,就实现了团结。比如,(0,1)(1,2)就实现了团结,而(0,1)(2,1)和(0,0)(1,2)都不是团结。把数合在一起的方法,是胸靠胸、背靠背、背靠胸或胸靠背。
请判断世界人民能否实现大团结。如果能,请输出大团结的实现方案。
Input
第一行,一个正整数n,表示世界上有n个人。剩余n行,每行是用空格隔开的两个自然数,大于等于0且小于等于6,第(1+i)行表示第i个人胸前和背后的数字。
Output
如大团结可以实现,输出n行,每行两个空格隔开的数字。第一个是人的编号(同输入);第二个是“-”或“+”,“+”表示这个人胸在前,背在后,“-”反之。人们按照你输出的顺序和面对的方向从前到后站立。具体参见样例。如大团结不能实现,输出一行“No Solution”(不含引号)。
Sample Input
5
1 2
2 4
2 4
6 4
2 1
Sample Output
2 -
5 +
1 +
3 +
4 -
HINT
对于100%的数据,1<=n<=100题解:
以所有的数字为点,每个人为边建立无向图,求图中的一个欧拉路径就可以了。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <stack> using namespace std; const int maxn=110,maxnum=6+1,use=-2147483647; int n,x[maxn],y[maxn],du[maxn],coun,start,edge[maxn][maxn]; stack<int> go; void dfs(int now) { for(int i=1;i<=maxnum;++i) { if(edge[now][i]) { --edge[now][i]; --edge[i][now]; --du[now]; --du[i]; dfs(i); } } // printf("%d ",now); go.push(now); } int main() { scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d%d",x+i,y+i);x[i]+=1;y[i]+=1; ++du[x[i]]; ++du[y[i]]; ++edge[x[i]][y[i]]; ++edge[y[i]][x[i]]; } for(int i=1;i<=maxnum;++i) { if(du[i]%2) { ++coun; if(coun==1) { start=i; } } } if(coun!=0 && coun!=2) { puts("No Solution"); return 0; } if(!start)start=1; dfs(start); for(int i=1;i<=maxnum;++i)if(du[i]>0){puts("No Solution");return 0;} int last=go.top(); go.pop(); while(!go.empty()) { int now=go.top(); go.pop(); for(int i=1;i<=n;++i) { if(x[i]==last && y[i]==now) { printf("%d +\n",i); x[i]=use; y[i]=use; break; } else { if(x[i]==now && y[i]==last) { printf("%d -\n",i); x[i]=use; y[i]=use; break; } } } last=now; } }
相关文章推荐
- MSN 与 中国人民大团结?
- 为世界人民服务。
- 世界人民的探月史(ZT)
- 中华人民抗日战争暨世界反法西斯战争的胜利70周年大阅兵
- 一个很不错的四格小漫画 - 世界人民的愿望
- 【题解】【欧拉图】罪世界-平行齿轮
- 苹果iPad营销了世界
- 【BZOJ】【P1306】【CQOI2009】【match循环赛】【题解】【搜索+剪枝】
- LeetCodet题解--18. 4Sum(4个数的和)
- 杭电多校 1002 Balala Power! 题解报告
- MC记者团 世界因你而精彩
- codechef Recipe Reconstruction 题解
- CCF送货(欧拉图)
- 剑指offer题解C++【7】斐波那契数列
- 你用什么态度去看待世界,你就会得到什么样的世界
- 【POJ】【P3237】【Tree】【题解】【树链剖分+线段树】
- LeetCode题解:122. Best Time to Buy and Sell Stock II
- 剑指offer题解C++【22】从上往下打印二叉树
- 潘多拉的世界 The World of Pandora
- 创新, FMA &amp; SMA 世界第一台VCD机的故事