拓扑排序
HDU1285
#include<bits/stdc++.h>
using namespace std;
const int maxn=600;
int n;
int main(){
int a,b;
int m;
while(cin>>n>>m){
vector<int>p[maxn];
int in[maxn];
priority_queue<int,vector<int>,greater<int> > w;
int sum=0;
for(int i=1;i<=m;i++){
cin>>a>>b;
p[a].push_back(b);
in[b]++;
}
for(int i=1;i<=n;i++){
if(in[i]==0)
w.push(i);
}
while(!w.empty()){
int x=w.top();
cout<<x;
w.pop();
for(int i=0;i<p[x].size();i++){
int v=p[x][i];
if(v){
in[v]--;
if(in[v]==0)
w.push(v);
}
}
p[x].clear();
sum++;
if(sum!=n)
cout<<" ";
}
cout<<endl;
}
return 0;
}