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----寒假学的拓扑排序都忘得七七八八的说了= =这一题的反向建图再好好理解

  • 相关阅读:
    一、代码风格
    Nginx之Eclipse开发环境配置
    Linux之tail命令实时收集[纠正误解]
    Java之"Mozilla Rhino"引擎(二)
    linux之tail -F命令异常file truncated
    Java之nio性能比较
    Java之nio MappedByteBuffer的资源释放问题
    Java之java.lang.IllegalMonitorStateException
    Java之线程池管理
    Java之NIO传输数据
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4340449.html
Copyright © 2011-2022 走看看