SGU195

来源:互联网 发布:好用的中性笔 知乎 编辑:程序博客网 时间:2024/05/16 15:45
/*一个公司有n个员工,每个员工都有一个上司或下属,公司要给程序员发奖金,每个人是1000发奖金的规则:1.一个员工可以给下属发奖金或获得上司的奖金,但不能即发奖金又获得奖金2.每个上司只能选择他的其中一个下属发奖金要求输出员工获得的最大的奖金数思路:建立一个连接图上司是下属的父节点,下属是子节点,从最后一个n开始遍历剪枝*/#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 500000+10int a[maxn],b[maxn],c[maxn];int main(){int i,j,n,k;while(scanf("%d",&n)!=EOF){for(i=2;i<=n;i++){scanf("%d",&a[i]);}memset(b,0,sizeof(b));int ans=0;for(i=n;i>=2;i--){if(!b[i]&&!b[a[i]]){b[i]=1;b[a[i]]=1;c[ans++]=i;}}printf("%d\n",ans*1000);for(i=ans-1;i>=0;i--){printf("%d",c[i]);if(i!=0) printf(" ");else printf("\n");}}return 0;}

原创粉丝点击