HDU1285 确定比赛名次(拓扑排序)

来源:互联网 发布:sqlserver 2005下载 编辑:程序博客网 时间:2024/05/09 03:14
#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;}

0 0