找树根和孩子

来源:互联网 发布:平面设计软件ai 编辑:程序博客网 时间:2024/05/01 19:29

Problem Description

给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子

Input

输入的第一行为T,表示测试数据的组数。对于每组测试数据的第一行:n(结点数<=100),m(边数<=200)。以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。

Output

对于每组测试数据:
第一行:树根:root。   
第二行:孩子最多的结点max。   
第三行:max的孩子。

Sample Input

18 74 14 21 31 52 62 72 8

Sample Output

42 6 7 8
 
//标程:
#include<stdio.h>#include<map>using namespace std;struct ss{int x,y;}p[210];int main(){//freopen("a.txt","r",stdin);    int t,n,m,i,j,a,b,flag,ans;map<int,int> m1,m2;scanf("%d",&t);while(t--){m1.clear(), m2.clear();        scanf("%d%d",&n,&m);for(i=0;i<m;i++) {scanf("%d%d",&p[i].x,&p[i].y);m1[p[i].x]++, m2[p[i].y]++;}map<int,int>::iterator it1,it2;ans=flag=0;        for(it1=m1.begin();it1!=m1.end();++it1){ans=it1->first;for(it2=m2.begin();it2!=m2.end();++it2)if(ans==it2->first) flag=1;if(!flag)  break;}printf("%d\n",ans);int maxn=0,node=0;        for(it1=m1.begin();it1!=m1.end();++it1)if(it1->second>maxn) maxn=it1->second, node=it1->first; printf("%d\n",node);flag=0;        for(i=0;i<m;i++){             if(p[i].x==node && flag==1) printf(" %d",p[i].y);if(p[i].x==node && flag==0) printf("%d",p[i].y), flag=1;}printf("\n");}return 0;}









原创粉丝点击