zoukankan      html  css  js  c++  java
  • POJ 3687 Labeling Balls(拓扑排序)

    题意:

    标号为 1~n 的 N 个球,满足给定的 M 个编号约束关系,输出最终满足关系的球的标号。

    思路:

    1. 相互之间有一定的约束关系,会联系到拓扑排序,如果利用拓扑排序去解决本题还需要一定的贪心思想;

    2. 因为要保证标号小的球靠前的优先级越高,所以对于正向图拓扑排序,无法满足,比如:<1, 4> <4, 2> <3, 5>

    3. 对于反向拓扑排序,用同样的方法只需要保证标号大的球尽量靠后就行了,具体见代码。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 210;
    vector<int> G[MAXN];
    int arr[MAXN], indeg[MAXN];
    
    bool judge(int u, int v) {
        for (int i = 0; i < G[u].size(); i++)
            if (G[u][i] == v) return false;
        return true;
    }
    
    int main() {
        int cases;
        scanf("%d", &cases);
        while (cases--) {
            int n, m;
            scanf("%d%d", &n, &m);
            for (int i = 1; i <= n; i++)
                G[i].clear(), indeg[i] = 0;
            while (m--) {
                int u, v;
                scanf("%d%d", &v, &u);
                if (judge(u, v)) {
                    G[u].push_back(v);
                    indeg[v] += 1;
                }
            }
            int w;
            for (w = n; w >= 1; w--) {
                int i;
                for (i = n; i >= 1; i--)
                    if (!indeg[i]) break;
                if (i == 0) break;
                
                arr[i] = w;
                indeg[i] = -1;
    
                for (int j = 0; j < G[i].size(); j++) {
                    int v = G[i][j];
                    if (indeg[v] > 0) 
                        indeg[v] -= 1;
                }   
            }
            if (w != 0) 
                printf("-1\n");
            else {
                for (int i = 1; i <= n; i++)
                    printf("%d ", arr[i]);
                printf("\n");
            }
        }
        return 0;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    字符串处理(包括正则生成工具)
    php.ini 个别字段笔记
    php-5.4 升级到 php7.2
    【mysql笔记】针对 group_concat 长度限制
    七牛,前端上传图片
    PHP 替换 特殊空白符
    【代码块】定时任务<swoole> 100%无人值守
    安装nodejs
    linux安装beanstalkd
    个人笔记上传 -- redis安装
  • 原文地址:https://www.cnblogs.com/kedebug/p/3074122.html
Copyright © 2011-2022 走看看