• cdoj 排名表 拓扑排序 排名输出 贪心


    //并不理解为什么需要反向建图,由大到小倒序确定排名。感觉正向由小到大和反向由大到小应该是一样的。

    解:拓排+贪心,反向建边,先找排名靠后的(now,不知道为什么)

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #include<stack>
    11 #include<string>
    12 
    13 using namespace std;
    14 
    15 vector <int> G[207];
    16 int T,n,m;
    17 int a[207],b[207];
    18 int d[207];
    19 int now;
    20 
    21 int main(){
    22     scanf("%d",&T);
    23     for (int cas=0;cas<T;cas++){
    24             scanf("%d%d",&n,&m);
    25             for (int i=1;i<=n;i++){
    26                     G[i].clear();
    27                     d[i]=0;
    28             }
    29             for (int i=0;i<m;i++){
    30                     int x,y;
    31                     scanf("%d%d",&x,&y);
    32                     d[x]++;
    33                     G[y].push_back(x);
    34             }
    35             now=n;
    36             for (int i=0;i<n;i++){
    37                     for (int j=n;j>=1;j--){
    38                             if (d[j]==0){
    39                                     d[j]=-1;
    40                                     a[now--]=j;
    41                                     int sz=G[j].size();
    42                                     for (int k=0;k<sz;k++){
    43                                             d[G[j][k]]--;
    44                                     }
    45                                     break;
    46                             }
    47                     }
    48             }
    49             if (now!=0){
    50                     printf("-1
    ");
    51                     continue;
    52             }
    53             for (int i=1;i<=n;i++){
    54                     b[a[i]]=i;
    55             }
    56             for (int i=1;i<=n;i++){
    57                     printf("%d%c",b[i],i==n?'
    ':' ');
    58             }
    59     }
    60     return 0;
    61 }
    62 /*
    63 1
    64 6 5
    65 6 1
    66 1 5
    67 4 5
    68 2 4
    69 3 4
    70 
    71 5
    72 4 0
    73 4 1
    74 1 1
    75 4 2
    76 1 2
    77 2 1
    78 4 1
    79 2 1
    80 4 1
    81 3 2
    82 */
    View Code
  • 相关阅读:
    【Cocos2dx 3.3 Lua】触屏事件
    (转载)【cocos2dx 3.x Lua] 注册事件函数详解
    【Cocos2dx 3.x Lua】CCParallaxNode使用
    TileMap地图
    linux rdate
    sqlmap 技巧整理
    linux ckconfig
    ubuntu remove mysql
    aliyun ubuntu mysql
    解决mysql“Access denied for user 'root'@'localhost'”
  • 原文地址:https://www.cnblogs.com/baby-mouse/p/4540995.html
Copyright © 2020-2023  润新知