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

来源:互联网 发布:三星电视遥控器软件 编辑:程序博客网 时间:2024/06/06 02:59

基础题,不多说。。

//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;typedef long long LL;const long long mod = 1e9 + 7;const int INF = 0x3f3f3f3f;const int M = 1050;vector<int>G[M];int n, m, indegree[M],q[M];int toposort(){    int i, j, k;    i=0;    while(i<n)    {        for(j=1; j<=n; j++)        {            if(indegree[j] == 0)            {                indegree[j]--;                q[i++] = j;                for(k=1; k<=n; k++)  //删除相关的边                    if(G[j][k])                     indegree[k]--;                break;            }        }    }    return 1;}int main(){    int i, a, b;    while(scanf("%d%d", &n, &m) == 2)    {        memset(G, 0, sizeof(G));        for(int i=0;i<M;++i)        {            G[i].clear();        }        memset(indegree, 0, sizeof(indegree));        for(i=1; i<=m; i++)        {            scanf("%d %d", &a, &b);            if(G[a][b] == 0)            {                G[a][b] = 1;                indegree[b]++;            }        }        toposort();        for(i=0; i<n; i++)        {            if(i != n-1)                 printf("%d ", q[i]);            else             printf("%d\n", q[i]);        }    }    return 0;}

0 0
原创粉丝点击