求助 90pts
查看原帖
求助 90pts
226113
火羽白日生楼主2020/10/31 11:28
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>

//#pragma GCC optimize(2)  //吸氧
//#pragma GCC optimize(3,"Ofast","inline")  //吸臭氧

typedef long long ll;
typedef unsigned long long ull;
using namespace std;

inline int read(){
    char ch=getchar();
    int x=0,w=1;
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<3)+(x<<1)+(ch^48);
        ch=getchar();
    }
    return x*w;
}

int n,id=0,ans=0;
int a[105],head[105],used[105],in[105];
struct node{
    int v,next;
}edge[40005];
void add(int u,int v){
    edge[++id].v=v;
    edge[id].next=head[u];
    head[u]=id;
    in[v]++;
}
queue<int> q;

int main()
{
    n=read();
    
    for(int i=1;i<=n;i++)
        used[i]=0;
        
    for(int i=1;i<=n;i++){
        int m,y;
        a[i]=read();
        m=read();
        used[a[i]]++;
        for(int j=1;j<=m;j++){
            y=read();
            add(a[i],y);
        }
    }
    
    for(int i=1;i<=n;i++)
        if(!in[a[i]])
            q.push(a[i]);
            
    while(!q.empty()){
        ans++;
        int u=q.front();
        q.pop();
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            in[v]--;
            if(!in[v] && used[i]){
                used[i]--;
                q.push(v);
            }
        }
    }
    if(ans==n) cout<<"YES\n";
	else cout<<n-ans<<"\n";
    return 0;
}
2020/10/31 11:28
加载中...