The Largest Generation (25)
来源:互联网 发布:数控编程案例 编辑:程序博客网 时间:2024/06/09 16:34
题目描述
A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the largest population.
输入描述:
Each input file contains one test case. Each case starts with two positive integers N (<100) which is the total number of family members in the tree (and hence assume that all the members are numbered from 01 to N), and M (<N) which is the number of family members who have children. Then M lines follow, each contains the information of a family member in the following format:ID K ID[1] ID[2] ... ID[K]where ID is a two-digit number representing a family member, K (>0) is the number of his/her children, followed by a sequence of two-digit ID's of his/her children. For the sake of simplicity, let us fix the root ID to be 01. All the numbers in a line are separated by a space.
输出描述:
For each test case, print in one line the largest population number and the level of the corresponding generation. It is assumed that such a generation is unique, and the root level is defined to be 1.
输入例子:
23 1321 1 2301 4 03 02 04 0503 3 06 07 0806 2 12 1313 1 2108 2 15 1602 2 09 1011 2 19 2017 1 2205 1 1107 1 1409 1 1710 1 18
输出例子:
9 4
我的代码(C++):
#include<iostream>using namespace std;int a[101][101],i,x,y,z,n,m,cnt[101],maxx=0,t;int dfs(int s){ int i,vis[101]={0},k=1; vis[s]=1; while(s!=1) { for(i=1;i<=n;i++) { if(a[s][i]==1 && vis[i]==0) { vis[i]=1; s=i; k++; break; } } } return k;}int main(){ cin>>n>>m;if(n==1){cout<<1<<" "<<1<<endl;return 0;} while(m--) { cin>>x>>y; while(y--) { cin>>z; a[z][x]=1; } } for(i=2;i<=n;i++) { cnt[dfs(i)]++; if(cnt[dfs(i)]>maxx) { maxx=cnt[dfs(i)]; t=dfs(i); } } cout<<maxx<<" "<<t<<endl; return 0;}
我的代码(Java):
import java.util.Scanner;public class Main { public static int dfs(int s,int n,int a[][]) { int i,vis[]=new int[101],k=1; vis[s]=1; while(s!=1) { for(i=1;i<=n;i++) { if(a[s][i]==1 && vis[i]==0) { vis[i]=1; s=i; k++; break; } } } return k; } public static void main(String[] args) { Scanner In=new Scanner(System.in); int a[][]=new int[101][101]; int cnt[]=new int[101],max=0,t=0; int n=In.nextInt(),m=In.nextInt();if(n==1) System.out.printf("%d %d\n",1,1);else{for(int i=0;i<m;i++){int x=In.nextInt(),y=In.nextInt();for(int j=0;j<y;j++){int z=In.nextInt();a[z][x]=1; }}for(int i=2;i<=n;i++){cnt[dfs(i,n,a)]++;if(cnt[dfs(i,n,a)]>max){max=cnt[dfs(i,n,a)];t=dfs(i,n,a);}}System.out.printf("%d %d\n", max,t);} }}
我的代码(C语言):
#include<stdio.h>int a[101][101],i,x,y,z,n,m,cnt[101],maxx=0,t;int dfs(int s){ int i,vis[101]={0},k=1; vis[s]=1; while(s!=1) { for(i=1;i<=n;i++) { if(a[s][i]==1 && vis[i]==0) { vis[i]=1; s=i; k++; break; } } } return k;}int main(){ scanf("%d%d",&n,&m);if(n==1){printf("%d %d\n",1,1);return 0;} while(m--) { scanf("%d%d",&x,&y); while(y--) { scanf("%d",&z); a[z][x]=1; } } for(i=2;i<=n;i++) { cnt[dfs(i)]++; if(cnt[dfs(i)]>maxx) { maxx=cnt[dfs(i)]; t=dfs(i); } } printf("%d %d\n",maxx,t); return 0;}
阅读全文
0 0
- The Largest Generation (25)
- The Largest Generation (25)
- The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- PAT The Largest Generation (25)
- 使用Sidecar将Node.js引入Spring Cloud
- tensorflow系列教程(1)之---fetch和feed的用法
- 重拾Java EE(1)——HTML
- class文件与dex文件比较
- Servlet过滤器和监听器
- The Largest Generation (25)
- 进程与线程之*定义*及*区别*
- Java学习从入门到精通的简单介绍
- Linux入门学习——进程
- SwipeRefreshLayout 无法刷新
- 欢迎使用CSDN-markdown编辑器
- 数据库开发规范
- Boolan-C++开发工程师-C++面对对象高级编程(上)- 第二周笔记
- 位操作设置某几位为0