40,球救,╯︿╰
查看原帖
40,球救,╯︿╰
893428
qiaozhipeng123楼主2024/7/17 15:01

https://www.luogu.com.cn/record/166628659

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
template<typename T> void read(T&x){
	int sign=1;x=0;char c;
	do{c=getchar();if(c=='-')sign=-1;}while(!isdigit(c));
	do{x=x*10+c-'0';c=getchar();}while(isdigit(c));
	x*=sign;
}
const int N=1e4;
int n,x,m,y,sum;
int in[N],a[N],head[N*4];
queue<int> q;
int t[N];
int Max=-1e9;
int ans;
struct op
{
	int to,next;
}e[N*4];
void add(int x,int y)
{
	e[sum].next=head[x];
	e[sum].to=y;
	head[x]=sum++;
}
int len;
void top(){
	for(int i=1;i<=Max;i++){
		if(in[i]==0&&t[i]!=0){
			q.push(i);
			ans--;
		}
	}
	while(!q.empty()){
		int l=q.front(); q.pop();
		for(int i=head[x];i!=-1;i=e[i].next){
			int r=e[i].to;
			in[r]--;
			if(in[r]==0&&t[r]!=0){
				ans--;
				q.push(r);
			} 
		}
	}
}
signed main(){
	memset(head,-1,sizeof(head));
	ios::sync_with_stdio(0);
	cout.tie(0);
	read(n);
	ans=n;
	for(int i=1;i<=n;i++){
		read(x);
		t[x]++;
		read(m);
		for(int j=1;j<=m;j++){
			read(y);
			add(x,y);
			in[y]++;
		}
		Max=max(Max,x);
	}
	top();
	if(ans==0){
		cout<<"YES";
	}
	else{
		cout<<ans;
	}
	return 0;
}
2024/7/17 15:01
加载中...