拓扑排序模板
给一个有向无环图求顺序
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int N = 1010;
typedef vector<int> vi;
vector<int>g[N];
vi ans;
int in[N];
int topo(int n)
{
for(int i=1;i<=n;i++)
{
if(in[i]==0) ans.pb(i);
}
for(int i=0;i<ans.size();i++)
{
int u=ans[i];
for(int j=0;j<g[u].size();j++)
{
int v=g[u][j];
in[v]--;
if(in[v]==0) ans.pb(v);
}
}
}
int main()
{
int n,m,a,b;
memset(in,0,sizeof(in));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
g[a].pb(b);
in[b]++;
}
topo(n);
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++)
{
printf("%d ",ans[i]);
}
cout<<endl;
}