90pts 求助
查看原帖
90pts 求助
468324
fanruiiislj楼主2021/11/21 11:25
#include<bits/stdc++.h>
typedef long long ll;
const int MAXN=100010;
std::vector<int>edge[MAXN];
int indeg[MAXN],A[MAXN];
bool exist[MAXN];
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int n;
    memset(exist,false,sizeof(exist));
    memset(indeg,0,sizeof(indeg));
    std::cin>>n;
    int n1=n;
    int maxs=-1;
    while(n--){
        int x,m;
        std::cin>>x>>m;
        maxs=std::max(maxs,x);
        exist[x]=true;
        while(m--) {
            int temp;
            std::cin>>temp;
            edge[x].push_back(temp);
            indeg[temp]++;
        }
    }
    int cnt=0;
    std::queue<int>q;
    for(int i=0;i<=maxs;i++){
        if(indeg[i]==0 &&exist[i]) q.push(i);
    }
    while(!q.empty()){
        int temp=q.front();
        q.pop();
        A[cnt++]=temp;
        for(auto to:edge[temp]){
            indeg[to]--;
            if(indeg[to]==0&&exist[to]) q.push(to);
        }
    }
    if(cnt==n1) std::cout<<"Yes"<<std::endl;
    else std::cout<<n1-cnt<<std::endl;
    return 0;
}

2021/11/21 11:25
加载中...