zoukankan      html  css  js  c++  java
  • 【vijos1790】拓扑编号

    problem

    solution

    codes

    //vijos1790
    //拓扑排序的本质是本次将入度为0的点排到序列的最前端。
    #include<iostream>
    #include<vector>
    #include<queue>
    #define maxn 100000+10
    using namespace std;
    int n, m, in[maxn], ans[maxn];
    vector<int>G[maxn];
    priority_queue<int>q;//默认小根堆
    int main(){
        cin>>n>>m;
        for(int i = 0; i < m; i++){
            int a, b;  cin>>a>>b;
            G[b].push_back(a); //反向求拓扑序
            in[a]++;
        }
        for(int i = 1; i <= n; i++)//初始化,入度为0在最前
            if(in[i]==0)q.push(i);
        int num = n;  //反向给节点编号
        while(!q.empty()){
            int t = q.top();  q.pop(); //每次取出编号最小的城市操作
            ans[t] = num--;
            for(int i = 0; i < G[t].size(); i++)
                if(--in[G[t][i]]==0)q.push(G[t][i]);
        }
        for(int i = 1; i <= n; i++)cout<<ans[i]<<" ";
        return 0;
    }
  • 相关阅读:
    面向对象:
    Android体系结构
    面向对象DAO模式
    集合框架
    异常
    面向对象接口
    面向对象多态
    面向对象继承
    面向对象抽象封装
    JDBC
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444751.html
Copyright © 2011-2022 走看看