Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
118911 | 陈家宝 | J4 | C++ | 通过 | 100 | 341 MS | 35496 KB | 745 | 2024-01-02 13:36:08 |
#include<bits/stdc++.h> using namespace std; const int N=2e6+10; struct node{ int to,nxt; }edge[N]; int n,m,head[N],tot,rd[N],tp[N],ans; queue<int> q; void add(int u,int v){ edge[++tot].to=v; edge[tot].nxt=head[u]; head[u]=tot; } int main(){ scanf("%d%d",&n,&m); for(register int i=1;i<=m;i++){ int u,v; scanf("%d%d",&u,&v); add(u,v); rd[v]++; } for(register int i=1;i<=n;i++){ if(!rd[i])q.push(i); tp[i]=1; } while(!q.empty()){ int u=q.front(); q.pop(); for(register int i=head[u];i;i=edge[i].nxt){ int v=edge[i].to; tp[v]=tp[u]+1; rd[v]--; if(!rd[v])q.push(v); } } for(register int i=1;i<=n;i++) if(tp[i]==1||tp[i]==2)ans++; printf("%d\n",ans); return 0; }