#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
vector<vector<int> >G(505);
int Count[505];
int indegree[505];
int main()
{
int n,m;
//freopen("d:\\test.txt","r",stdin);
while(cin>>n>>m)
{
memset(indegree,0,sizeof(indegree));
memset(Count,0,sizeof(Count));
priority_queue<int,vector<int>,greater<int> >q;
while(!q.empty())
{
q.pop();
}
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
if(find(G[u].begin(),G[u].end(),v)==G[u].end()) //find函数没找到v返回容器尾部
{
G[u].push_back(v);
indegree[v]++;
}
}
for(int i=1;i<=n;i++)
{
if(!indegree[i]) q.push(i);
}
int j=0;
while(!q.empty())
{
int cur=q.top();
q.pop();
Count[j++]=cur;
for(int i=0;i<G[cur].size();i++)
{
int e=G[cur][i];
indegree[e]--;
if(!indegree[e]) q.push(e);
}
}
for(int i=0;i<n;i++)
{
if(i<n-1) cout<<Count[i]<<" ";
else cout<<Count[i];
}
cout<<endl;
for(int i=0;i<505;i++) G[i].clear();
}
return 0;
}
HDU1285 确定比赛名次(拓扑排序)
最新推荐文章于 2021-06-13 01:17:47 发布