hdu1285 确定比赛名次【拓扑排序】

来源:互联网 发布:停车位软件哪个好 编辑:程序博客网 时间:2024/06/07 07:22

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285
题意:中文题
解析:拓扑排序裸题

#include <bits/stdc++.h>using namespace std;const int maxn = 505;vector<int>G[maxn];int in[maxn];vector<int>ans;int main(void){    int n,m;    while(~scanf("%d %d",&n,&m))    {        ans.clear();        for(int i=1;i<=n;i++)            G[i].clear();        memset(in,0,sizeof(in));        for(int i=1;i<=m;i++)        {            int x,y;            scanf("%d %d",&x,&y);            G[x].push_back(y);            in[y]++;        }        priority_queue<int,vector<int>,greater<int> >q;        for(int i=1;i<=n;i++)        {            if(in[i]==0)                q.push(i);        }        while(!q.empty())        {            int u = q.top();            q.pop();            ans.push_back(u);            for(unsigned i = 0;i<G[u].size();i++)            {                int v = G[u][i];                in[v]--;                if(in[v]==0)                    q.push(v);            }        }        for(unsigned int i=0;i<ans.size();i++)        {            if(i)printf(" ");            printf("%d",ans[i]);        }        puts("");    }    return 0;}
原创粉丝点击