比赛 2024暑假C班集训E 评测结果 EEEAEWWAAA
题目名称 灾难 最终得分 40
用户昵称 dream 运行时间 1.159 s
代码语言 C++ 内存使用 3.42 MiB
提交时间 2024-07-14 11:11:05
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int hd[N],to[N*2],nxt[N*2];
int rub[N];
int n;
int rub2[N];
int rub3[N];
int cnt=0,cnt2;
void add(int x,int y){
	cnt++;
	to[cnt]=y;
	nxt[cnt]=hd[x];
	hd[x]=cnt;
}
int get(int x){
	if(x==0){
		return 0;
	}
	int res=1;
	for(int i=hd[x];i;i=nxt[i]){
		rub[to[i]]--;
		rub2[++cnt2]=to[i];
		rub3[cnt2]++;
//		cout<<"to "<<to[i]<<" "<<rub[to[i]]<<"\n";
		if(rub[to[i]]>0){
			continue;	
		}
		
		res+=get(to[i]);
	}
	return res;
}
int main(){
	ios::sync_with_stdio(0);
	freopen("catas.in","r",stdin);
	freopen("catas.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
    	int a;
    	while(cin>>a&&a){
    		add(a,i);
    		rub[i]++;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=cnt2;j++){
			rub[rub2[j]]+=rub3[j];
		}
		cnt2=0;
		for(int j=1;j<=n;j++){
			rub2[j]=0;
			rub3[j]=0;
		}	
		cout<<get(i)-1<<"\n";
	}
    return 0;
}