NBUT 1218 You are my brother
2015-12-20 19:51
459 查看
B - You are my brother
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:
Submit Status Practice NBUT
1218
Appoint description:
14rj134 (2015-03-19)System Crawler (2015-12-19)
Description
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.
Input
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.
Output
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.
Sample Input
Sample Output
Hint
对于1,2两点,找他的父亲就好了。。看谁的父亲多。。
#include<stdio.h>
#include <iostream>
using namespace std;
#include <cstring>
typedef long long ll;
#include <map>
#include <set>
int map1[2002][2002];
int a[1002];
int b[1002];
int n;
int ans1;
int ans2;
int max1;
int max2;
int max3;
void dfs(int x)
{
int i;
for(i=1; i<=max3; i++)
{
if(map1[x][i])
{
ans1++;
dfs(i);
}
}
}
void dfs1(int x)
{
int i;
for(i=1; i<=max3; i++)
{
if(map1[x][i])
{
ans2++;
dfs1(i);
}
}
}
int main()
{
while(cin>>n)
{
memset(map1,0,sizeof(map1));
int i;
max1=max2=-1;
for(i=1; i<=n; i++)
{
scanf("%d%d",&a[i],&b[i]);
max1=max(a[i],b[i]);
max2=max(max2,max1);
map1[a[i]][b[i]]=1;
}
max3=max2;
ans1=0;
ans2=0;
dfs(1);
dfs1(2);
if(ans1==ans2)
cout<<"You are my brother"<<endl;
else if(ans1<ans2)
cout<<"You are my younger"<<endl;
else if(ans1>ans2)
cout<<"You are my elder"<<endl;
}
}
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:
Submit Status Practice NBUT
1218
Appoint description:
14rj134 (2015-03-19)System Crawler (2015-12-19)
Description
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.
Input
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.
Output
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.
Sample Input
5 1 3 2 4 3 5 4 6 5 6 6 1 3 2 4 3 5 4 6 5 7 6 7
Sample Output
You are my elder You are my brother
Hint
无
对于1,2两点,找他的父亲就好了。。看谁的父亲多。。
#include<stdio.h>
#include <iostream>
using namespace std;
#include <cstring>
typedef long long ll;
#include <map>
#include <set>
int map1[2002][2002];
int a[1002];
int b[1002];
int n;
int ans1;
int ans2;
int max1;
int max2;
int max3;
void dfs(int x)
{
int i;
for(i=1; i<=max3; i++)
{
if(map1[x][i])
{
ans1++;
dfs(i);
}
}
}
void dfs1(int x)
{
int i;
for(i=1; i<=max3; i++)
{
if(map1[x][i])
{
ans2++;
dfs1(i);
}
}
}
int main()
{
while(cin>>n)
{
memset(map1,0,sizeof(map1));
int i;
max1=max2=-1;
for(i=1; i<=n; i++)
{
scanf("%d%d",&a[i],&b[i]);
max1=max(a[i],b[i]);
max2=max(max2,max1);
map1[a[i]][b[i]]=1;
}
max3=max2;
ans1=0;
ans2=0;
dfs(1);
dfs1(2);
if(ans1==ans2)
cout<<"You are my brother"<<endl;
else if(ans1<ans2)
cout<<"You are my younger"<<endl;
else if(ans1>ans2)
cout<<"You are my elder"<<endl;
}
}