uva10926

来源:互联网 发布:网络美工的工作内容 编辑:程序博客网 时间:2024/06/06 12:38
#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>using namespace std;int n;bool map[110][110];//记录j是否是i的依赖点int ans[110];//每个点的依赖点数目,一旦赋值就不会变,因为我们是倒着求ans值的,也就是从最少的点开始……int dfs(int i)//返回节点i的依赖点,由于没有环形,所以一个点不可能即是间接依赖点又是直接依赖点{    if(ans[i]) return ans[i];    int Max=0;    for(int j=1;j<=n;j++)    if(map[i][j])        Max=max(Max,dfs(j)+1);    ans[i]=Max;    return Max;}int main(){    while(scanf("%d",&n),n)    {        memset(map,0,sizeof(map));        memset(ans,0,sizeof(ans));        for(int i=1;i<=n;i++)        {            int t;scanf("%d",&t);            for(int j=0;j<t;j++)            {                int a;                scanf("%d",&a);                map[i][a]=1;            }            map[0][i]=1;//假设节点0与所有节点有依赖关系,我们要构造一个树,那么0就是树根        }        dfs(0);        int ans_=1;        for(int i=2;i<=n;i++)        {            if(ans[i]>ans[ans_]) ans_=i;        }        printf("%d\n",ans_);    }    return 0;}
原创粉丝点击