AC

♻️lzhh_lzhh32  •  3个月前


#include<bits/stdc++.h>
using namespace std;
int n;		//n点 
int maxw=-1,minw=205;
vector<int> d[205];
bool vis[205];
int dis[205];		//入度 
queue<int> q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,m;
		cin>>x>>m; 
		for(int j=0;j<m;j++){
			int c;
			cin>>c;
			d[x].push_back(c);		//有向图
			maxw=max(maxw,c);
			minw=min(minw,c);
			dis[c]++; 
		}
		maxw=max(maxw,x);
		minw=min(minw,x);
	}
	
	for(int i=minw;i<=maxw;i++){		//入度为0 
		if(dis[i]==0) q.push(i);
	}
	int cnt=0;
	while(!q.empty()){
		int node=q.front();
		//cout<<node<<' ';
		vis[node]=1;
		q.pop();
		for(int i=0;i<d[node].size();i++){
			dis[d[node][i]]--;
			if(dis[d[node][i]]==0){
				//cout<<d[node][i]<<' ';
				vis[d[node][i]]=1;
				q.push(d[node][i]);
			}
		}
	}
	for(int i=minw;i<=maxw;i++){
		if(vis[i]==0) cnt++;
	}
	if(cnt==0) cout<<"YES"<<endl;
	else cout<<cnt<<endl;
	return 0;
}

评论:

请先登录,才能进行评论