zoukankan      html  css  js  c++  java
  • POJ 3687 Labeling Balls【拓扑排序 优先队列】

    题意:给出n个人,m个轻重关系,求满足给出的轻重关系的并且满足编号小的尽量在前面的序列

    因为输入的是a比b重,但是我们要找的是更轻的,所以需要逆向建图

    逆向建图参看的这一篇http://blog.csdn.net/scf0920/article/details/28108243

    然后用优先队列来实现的参看的这一篇

    http://ycool.com/post/u9ahrwg#algo3

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int maxn=1005;
    15 int g[maxn][maxn],out[maxn],ans[maxn];
    16 
    17 int main(){
    18     int t,n,m,u,v,tmp,i,j;
    19     scanf("%d",&t);
    20     while(t--){
    21         memset(g,0,sizeof(g));
    22         memset(out,0,sizeof(out));
    23         cin>>n>>m;
    24         for(i=0;i<m;i++){
    25             cin>>u>>v;
    26             if(!g[u][v]){
    27                 g[u][v]=1;
    28                 out[u]++;
    29             }
    30         }
    31         priority_queue<int> q;
    32         for(i=1;i<=n;i++){
    33             if(out[i]==0) q.push(i);
    34         }
    35         
    36         for(i=n;i>=1;i--){
    37             if(q.empty()) break;
    38             u=q.top();q.pop();//取出队列中编号最大的数 
    39             ans[u]=i;//使得大的数尽量往后面放 
    40             for(j=1;j<=n;j++){
    41                 if(g[j][u]){
    42                     g[j][u]=0;
    43                     out[j]--;
    44                     if(out[j]==0) q.push(j);
    45                 }
    46                 
    47             }
    48         }
    49         
    50         if(i) printf("-1
    ");
    51         else{
    52             printf("%d",ans[1]);
    53             for(i=2;i<=n;i++) printf(" %d",ans[i]);
    54             printf("
    ");
    55         }        
    56     }
    57     return 0;
    58 }
    View Code

    go---go----寒假学的拓扑排序都忘得七七八八的说了= =这一题的反向建图再好好理解

  • 相关阅读:
    python基础十一之装饰器进阶
    python基础十之装饰器
    python基础九之函数
    python基础八之文件操作
    python基础七之copy
    python基础七之集合
    python基础数据类型汇总
    python基础六之编码
    synchronized关键字的内存语义
    对于this和当前线程的一些理解
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4340449.html
Copyright © 2011-2022 走看看