找树根和孩子
2013-11-18 20:42
218 查看
找树根和孩子
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 14 Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
Input
输入的第一行为T,表示测试数据的组数。对于每组测试数据的第一行:n(结点数<=100),m(边数<=200)。以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。
Output
对于每组测试数据:第一行:树根:root。
第二行:孩子最多的结点max。
第三行:max的孩子。
Sample Input
1 8 7 4 1 4 2 1 3 1 5 2 6 2 7 2 8
Sample Output
4 2 6 7 8
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
father | 4 | 4 | 1 | 0 | 1 | 2 | 2 | 2 |
child | 1 | 3 | 0 | 2 | 0 | 0 | 0 | 0 |
/*首先读入数据,将每个点的父节点存入father数组中,遍历一边哪个点没有父节点就是根节点,读入的同时将每个父节点拥有的孩子数存入child数组中,即可求出哪个节点孩子最多,具体数据样例如上表所示*/
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main ()
{
int a,b,j,q;
int father[1050],child[1050];
int t;
int n,m,max1;
scanf("%d",&t);
while(t--)
{ max1=0;
q=0;
memset(father,0,sizeof(father));
memset(child,0,sizeof(child));
scanf("%d%d",&n,&m);
for(int i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
father[b]=a;
child[a]++;
}
for(int i=1; i<=n; i++)
{
if(father[i]==0)
printf("%d\n",i);
}
for(int i=1;i<=n;i++)
{
if(max1<child[i])
{
max1=child[i];//记录个数用于输出格式
j=i;
}
}
printf("%d\n",j);
for(int i=1;i<=n;i++)
{
if(father[i]==j)
{
q++;
if(q!=max1)//如果不是最后一个就输出一个空格最后一个则不要输出空格
printf("%d ",i);
else
printf("%d",i);
}
}
printf("\n");
}
return 0;
}
相关文章推荐
- 26791: 找树根和孩子
- 找树根和孩子
- 练习赛10.2.找树根和孩子
- 找树根和孩子
- 找树根和孩子
- 找树根和孩子
- 孩子偷东西,撒谎,她用这四个字改变他
- 怎么惩罚熊孩子? 这5个好方法不打不骂, 但效果很好
- flex和他的孩子--flex布局属性的简单应用及页面体现
- 为什么孩子学习的更直接
- 未来孩子们需要具备什么能力?家长应该怎样规划孩子的成长路径?
- 为孩子培养4种朋友
- 向孩子学习(转载)
- 救救孩子
- 北大法学院院长苏力毕业典礼致词:你得是有出息的孩子
- 向孩子学习(转载)
- 巴尔默承认给自己的孩子洗脑
- DELPHI 孩子兄弟表示法 (递归实现)
- 你的软件,你的孩子
- 一位英国摄影家镜头里的孩子-世上最无邪的脸孔