第七个点WA了,想不出来
查看原帖
第七个点WA了,想不出来
647347
yushen6474楼主2024/5/22 21:00
#include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;

const int N=510,M=2e4+10;

queue<int> Q;

int head[N],elem[M],Next[M],Index,Inside[N];
bool tick[N];

int n;

void add(int a,int b){
	elem[Index]=b;
	Next[Index]=head[a];
	head[a]=Index++;
	Inside[b]++;
}

void topSort(){
	for(int i=1;i<=N;i++){
		if(!Inside[i]&&tick[i]){
			Q.push(i);
		}
	}
	
	while(!Q.empty()){
		int cur=Q.front();
		Q.pop();
		
		for(int i=head[cur];i!=-1;i=Next[i]){
			int j=elem[i];
			Inside[j]--;
			
			if(!Inside[j]&&tick[j]){
				Q.push(j);
			}
			
		}
			
	}
	
}

int main(){
	cin>>n;
	memset(head,-1,sizeof(head));
	for(int i=1;i<=n;i++){
		int x,m;
		cin>>x>>m;
		tick[x]=true;
		
		for(int j=1;j<=m;j++){
			int y;
			cin>>y;
			add(x,y);
		}
	}
	
//	for(int i=1;i<=n;i++){
//		cout<<i<<":";
//		for(int j=head[i];j!=-1;j=Next[j]){
//			cout<<j<<" ";
//		}
//		cout<<"["<<Inside[i]<<"]"<<endl;
//	}
	
	
	
	topSort();
	int cnt=n;
	for(int i=1;i<=N;i++){
//		cout<<Inside[i]<<" ";
		if(!Inside[i]&&tick[i]){
			cnt--;
		}
	}
//	cout<<endl;
	
	
	
	if(cnt){
		cout<<cnt;
	}else{
		cout<<"Yes";
	}
	
	
	return 0;
}

2024/5/22 21:00
加载中...