主要是要明白拓扑排序的概念,就是找出满足用有向图表示的偏序关系的全序关系,知道这一点之后,直接模拟即可。不断寻找入度为0的点加进来,把相邻的点入度减一。重复到无法添加。
const int MAXN=(int)1e5+5,MOD=142857;vector e[MAXN];int a[MAXN],head[MAXN],ind[MAXN],vis[MAXN];void init(){ memset(ind,0,sizeof(ind)); memset(head,0,sizeof(head)); }void solve(){ init(); int n,m,u,v,k,sum(0); cin>>n>>m>>k; for(int i=1;i<=k;i++){ scanf("%d",&u); a[u]++; } for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); e[u].push_back(v); ind[v]++; } queue que; for(int i=1;i<=n;i++){ if(!ind[i]){ // ind[i]--; que.push(i); vis[i]=1; } } while(!que.empty()){ int tmp=que.front(); //cout<<<" "< <