NBUT 1218 You are my brother
来源:互联网 发布:湖南省软件协会 编辑:程序博客网 时间:2024/05/20 19:47
[1218] You are my brother
- 时间限制: 1000 ms 内存限制: 131072 K
- 问题描述
- Little A gets to know a new friend, Little B, recently. One day, they realize that they are family 500 years ago. Now, Little A wants to know whether Little B is his elder, younger or brother.
- 输入
- There are multiple test cases.
For each test case, the first line has a single integer, n (n<=1000). The next n lines have two integers a and b (1<=a,b<=2000) each, indicating b is the father of a. One person has exactly one father, of course. Little A is numbered 1 and Little B is numbered 2.
Proceed to the end of file. - 输出
- For each test case, if Little B is Little A’s younger, print “You are my younger”. Otherwise, if Little B is Little A’s elder, print “You are my elder”. Otherwise, print “You are my brother”. The output for each test case occupied exactly one line.
- 样例输入
51 32 43 54 65 661 32 43 54 65 76 7
- 样例输出
You are my elderYou are my brother
- 提示
无
- 来源
辽宁省赛2010
题目意思很简单,输入N对数a,b,表示b是a的父亲,最后求的是1和2的关系,也就是树的深度。(注意,若a和b不在同一棵树上,则他们的关系为brother)代码一:#include <cstring>#include <cstdio>int main() { int n,x,y; int ans[2005]; while(~scanf("%d",&n)) { memset(ans,0,sizeof(ans)); for(int i=0; i<n; i++) { scanf("%d%d",&x,&y); ans[x]=y; } int temp=1,a=0,b=0; while(ans[temp]){ a++; temp=ans[temp]; } temp=2; while(ans[temp]!=0) { b++; temp=ans[temp]; } if(a>b) printf("You are my elder\n"); else if(a<b) printf("You are my younger\n"); else printf("You are my brother\n"); } return 0;}
代码二:#include <cstdio>using namespace std;int main() { int n,x,y; int la,lb,a,b; while(~scanf("%d",&n)) { la=1; lb=2; a=0; b=0; while(n--){ scanf("%d%d",&x,&y); if(la!=lb) { if(x==la) { la=y; a++; } if(x==lb) { lb=y; b++; } } } if(a>b) printf("You are my elder\n"); else if(a<b) printf("You are my younger\n"); else printf("You are my brother\n"); } return 0;}
代码三:#include <cstdio>int fa[2010];int n,x,y;int Find(int x,int &H) { while(x != fa[x]) { x = fa[x]; H++; } return x;}int main() { while(~scanf("%d",&n)) { for(int i = 1; i <= 2000; i++) //用并查集时,初始化要注意上限,如果用n会TLE fa[i] = i; while(n--) { scanf("%d %d",&x,&y); fa[x] = y; } int a = 0 , b = 0 ; int f1 = Find( 1 , a ); int f2 = Find( 2 , b ); if(f1 != f2) //此时 1 和 2 并不在同一棵树上 printf("You are my brother\n"); else { if(a > b) printf("You are my elder\n"); else if(a < b) printf("You are my younger\n"); else printf("You are my brother\n"); } } return 0;}
以上代码 有一部分是根据网上题解思路所写的,据说这题还可以用 DFS+线段树来做,只是目前还没搞懂,等待更新……
0 0
- NBUT 1218 You are my brother
- NBUT 1218 You are my brother
- NBUT 1218 You are my brother
- NBUT 1218 You are my brother
- You are my brother NBUT
- nbut 1218 You are my brother 一道值的思考的题目
- You are my brother
- You are my brother
- You Are My Brother
- You are my brother
- You are my brother
- You are my brother
- You are my brother
- You are my brother
- NOJ 1218 You are my brother
- 1053: You are my brother
- NBUT1218 You are my brother
- NYOJ282-You are my brother
- bootstrap3 char.js 使用
- 调试Bug的神兵利器:通过WinDbg条件断点收集Log
- 互联网的发展关键词:连接——集合器与过滤器?
- 【Mockplus教程】安装Mockplus
- 求二叉树的先序遍历--知中序和后序求前序
- NBUT 1218 You are my brother
- C语言之文件操作04——输入矩阵a,b,求乘积c,并打印a,b,c到文件
- jquery实现选项在两个下拉列表之间选择性移动的功能
- 如何将VirtualBox和VMware虚拟机相互转换
- No such file or directory (/Users/appleapple/Library/Developer/Xcode/DerivedData/
- 数学1A - Power of Cryptography
- R语言之描述性统计量
- fastCGI 攻击
- Til the Cows Come Home