zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Centos7 安装 Nginx
    Centos7 安装Php7 (貌似没成功)
    Centos7 安装 Mysql (Ubuntu)
    Centos7 安装apache(LAMP)
    Tp5 写类下商品计算数量
    Tp5 写随机数(商品货号)
    Tp5的 多项搜索框(下拉框+输入框)
    centos7 安装python3
    centos 安装notepad++
    用selenium控制已打开的浏览器
  • 原文地址:https://www.cnblogs.com/baby-mouse/p/4540995.html
Copyright © 2011-2022 走看看