• HDU 1285 确定比赛名次


    拓扑排序裸题。

    唯一要考虑的是如何保证字典序输出结果。

    这里用最简单的方法,每次都将队列里的点排序即可。

    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    int n , m , a , b , in[600];
    vector <int> g[600];
    
    void init(){
        for(int i=0;i<=500;i++) g[i].clear();
        for(int i=0;i<=500;i++) in[i] = 0;
    }
    int c = 0 , C=0;
    int at[1000] , fn[1000];
    
    void topo(){
        queue<int> q;
        C = 0;
        for(int i=1;i<=n;i++) if(in[i] == 0) q.push(i);
        while(!q.empty()){
            int x = fn[++C] = q.front();
            q.pop();
            c = 0;
            
            for(int i=0;i<g[x].size();i++) {
                int v = g[x][i];
                if(in[v] > 0) in[v]--;
                if(in[v] == 0) q.push(v);
            }while(!q.empty()) at[++c]=q.front(),q.pop();
            sort(at+1,at+1+c);
            for(int i=1;i<=c;i++) q.push(at[i]);
        }
        for(int i=1;i<=C;i++) printf("%d%c",fn[i],i==C?'
    ':' ');
        return ;
        
    }
    
    int main() {
        while(~scanf("%d %d",&n,&m)){
            init();
            while(m--){
                scanf("%d %d",&a,&b);
                g[a].push_back(b);
                in[b] ++;
            }
            topo();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    java的反射机制浅谈 分类: java
    2.4.3 Cow Tours
    2.4.2 Overfencing
    2.4.1 The Tamworth Two
    Shortest Paths
    2.3.5 Controlling Companies
    2.3.4 Money Systems
    2.3.3 Zero Sum
    2.3.2 Cow Pedigrees
    2.3.1 Longest Prefix
  • 原文地址:https://www.cnblogs.com/cton/p/3453762.html
Copyright © 2020-2023  润新知