SDJZUOJ 1032 一家人(并查集入门)
2013-07-26 09:11
162 查看
SDJZUOJ 1032 一家人(并查集入门) 题目链接:http://sdjzu.acmclub.com/index.php?app=problem_title&id=147&problem_id=1032
并查集水
题目分析:一个一维数组就能解决问题,下标代表人的编号,内容代表这个人父亲的编号。这样一个一维数组就描述出了一个树的结构。顶点没有父亲,所以它的值是0。所以我们可以从小明找到顶点,用一个计数器记下走了几步,小宇同样,比较两个计数器的值,哪个大,哪个就是晚辈。
code:
下面这个不知是不是标程,也不知用什么思想做的,待研究……
code:
#include<cstdio>
#include<map>
using namespace std;
int main()
{
int n,a,b,na[5000],nb[5000];
map<int,int> p;
while(scanf("%d",&n)!=EOF)
{
p.clear();
while(n--)
{
scanf("%d%d",&a,&b);
p[a]=b;
}
int k1=0;
na[k1]=p[1];
while(p.count(na[k1]))
{
int t;
t=p[na[k1]];
k1++;
na[k1]=t;
}
int k2=0;
nb[k2]=p[2];
while(p.count(nb[k2]))
{
int t;
t=p[nb[k2]];
k2++;
nb[k2]=t;
}
int flag=0;
for(int i=0;i<=k1;i++)
{
if(flag)
break;
for(int j=0;j<=k2;j++)
if(na[i]==nb[j])
{
if(i<j)
printf("You are my younger\n");
else if(i>j)
printf("You are my elder\n");
else
printf("You are my brother\n");
flag=1;
break;
}
}
}
return 0;
}
并查集水
题目分析:一个一维数组就能解决问题,下标代表人的编号,内容代表这个人父亲的编号。这样一个一维数组就描述出了一个树的结构。顶点没有父亲,所以它的值是0。所以我们可以从小明找到顶点,用一个计数器记下走了几步,小宇同样,比较两个计数器的值,哪个大,哪个就是晚辈。
code:
#include<stdio.h> int main() { int ak[3000],i,a,b,n,counter1,counter2; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d%d",&a,&b); ak[a]=b; } i=1; counter1=counter2=0; while(ak[i]) { i=ak[i]; counter1++; } i=2; while(ak[i]) { i=ak[i]; counter2++; } if(counter1<counter2)printf("You are my younger\n"); else if(counter2<counter1)printf("You are my elder\n"); else printf("You are my brother\n"); } return 0; }PS:第一次数组开30居然runtime error,无语了果断开3000……
下面这个不知是不是标程,也不知用什么思想做的,待研究……
code:
#include<cstdio>
#include<map>
using namespace std;
int main()
{
int n,a,b,na[5000],nb[5000];
map<int,int> p;
while(scanf("%d",&n)!=EOF)
{
p.clear();
while(n--)
{
scanf("%d%d",&a,&b);
p[a]=b;
}
int k1=0;
na[k1]=p[1];
while(p.count(na[k1]))
{
int t;
t=p[na[k1]];
k1++;
na[k1]=t;
}
int k2=0;
nb[k2]=p[2];
while(p.count(nb[k2]))
{
int t;
t=p[nb[k2]];
k2++;
nb[k2]=t;
}
int flag=0;
for(int i=0;i<=k1;i++)
{
if(flag)
break;
for(int j=0;j<=k2;j++)
if(na[i]==nb[j])
{
if(i<j)
printf("You are my younger\n");
else if(i>j)
printf("You are my elder\n");
else
printf("You are my brother\n");
flag=1;
break;
}
}
}
return 0;
}
相关文章推荐
- poj 2524 并查集入门
- hdu 1856 More is better (并查集入门)
- hdu 1232 畅通工程(入门之并查集)
- POJ 2524 Ubiquitous Religions【并查集入门】
- HDU 1232 解题报告 并查集入门
- HDU 1213 How Many Tables 并查集入门
- hrbustoj 1073:病毒(并查集,入门题)
- hdu 1213 并查集入门题
- 并查集入门(1213)
- poj 2524:Ubiquitous Religions(并查集,入门题)
- 并查集入门题 hd1232 poj2524 hd1233 hd1213
- POJ 2524 Ubiquitous Religions【并查集入门】
- (并查集入门)Ubiquitous Religions
- hdu通畅工程(并查集入门)
- POJ2236(并查集入门)
- POJ 1703 Find them, Catch them 第一次做关系并查集....真真是入门神题
- HDU 1213 How Many Tables (并查集炒鸡入门题)
- HDOJ 1102 Constructing Roads(并查集入门)
- 【并查集入门专题1】A+B+D 三道模板题 hdu1232 hdu1233 poj2524【并查集模板】
- 杭电1232——畅通工程(并查集的入门…