♻️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;
}
评论:
请先登录,才能进行评论