Lang:GCC
Edit12345678910111213141516171819202122232425262728293031#include<stdio.h>#define MAXN 100001#define MAXM 500001int head[MAXN+1]={0};// 表示头指针,初始化为0int p[MAXM+1]; // 表示指向的节点int next[MAXM+1]={0}; // 模拟指针,初始化为0int edgecnt; // 记录边的数量int N,M,deg[MAXN];void addedge(int u,int v){edgecnt++;p[edgecnt]=v;next[edgecnt]=head[u];head[u]=edgecnt;}void solve(){int queue[100001],po=0;int i;for(i=0;i<N;i++){if(deg[i]==0)queue[po++]=i;}while(po!=0){int v=queue[po-1];po--;for(i=head[v];i;i=next[i]){deg[p[i]]--;