比赛 2024暑假C班集训E 评测结果 TTTTTTTWWA
题目名称 灾难 最终得分 10
用户昵称 AeeE5x 运行时间 13.751 s
代码语言 C++ 内存使用 7.68 MiB
提交时间 2024-07-14 11:18:58
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define rev(x) reverse(x.begin(),x.end())
using namespace std;
//const int md=1e9+7;
int n;
vector<int> ve[65537],vea[65537];
vector<int> st;
bool ed[65537];
int ans;
void f(int x){
	ed[x]=1;
	ans--;
	queue<int> que;
	que.push(x);
	while(!que.empty()){
		for(int i=0;i<vea[que.front()].size();i++){
			if(!ed[vea[que.front()][i]]) ed[vea[que.front()][i]]=1,que.push(vea[que.front()][i]),ans--;
		}
		que.pop();
	}
	memset(ed,0,sizeof ed);
}
int main(){
	freopen("catas.in","r",stdin);
	freopen("catas.out","w",stdout);
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		while(true){
			int p;scanf("%d",&p);
			if(!p) break;
			ve[i].push_back(p);
			vea[p].push_back(i);
		}
	}
	for(int i=1;i<=n;i++) if(ve[i].size()==0) st.push_back(i);
	for(int p=1;p<=n;p++){
		ans=n-1;
		ed[p]=1;
		for(int i=0;i<st.size();i++) if(st[i]!=p) f(st[i]);
		printf("%d\n",ans);
	}
	
	return 0;
}