Round #203 (Div. 2)B------Resort

来源:互联网 发布:p2p网络借贷监管政策 编辑:程序博客网 时间:2024/06/01 12:22

思路:把出度大于1的点去掉,以每一个hotel为起点搜索找最长路径。

链接:点击打开链接


#include<cstdio>#include<iostream>#include<cstring>using namespace std;int len,fa[100010],sum[100010],maxpath,hotel[100010];int dfs(int x){    if(fa[x]==0)        return len;    len++;    return dfs(fa[x]);}void print(int x){    if(fa[x]==0)    {        printf("%d\n",maxpath);        printf("%d",x);        maxpath--;        if(maxpath)            printf(" ");        else printf("\n");    }    else    {        print(fa[x]);        printf("%d",x);        maxpath--;        if(maxpath) printf(" ");        else printf("\n");    }    return;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        int cnt=0,tmp,maxindex;        memset(sum,0,sizeof(sum));        memset(fa,0,sizeof(fa));        for(int i=1;i<=n;i++)        {            scanf("%d",&tmp);            if(tmp==1)                hotel[cnt++]=i;        }        for(int i=1;i<=n;i++)        {            scanf("%d",&fa[i]);            sum[fa[i]]++;        }        for(int i=1;i<=n;i++)        {            if(sum[fa[i]]>1)                fa[i]=0;        }        maxpath=-1;        for(int i=0;i<cnt;i++)        {            len=1;            int h=dfs(hotel[i]);            if(h>maxpath)            {                maxpath=h;                maxindex=hotel[i];            }        }        print(maxindex);    }    return 0;}



原创粉丝点击