• 洛谷P1475 控制公司 Controlling Companies


    P1475 控制公司 Controlling Companies

    •  
    • 66通过
    • 158提交
    • 题目提供者该用户不存在
    • 标签USACO
    • 难度普及/提高-

     提交  讨论  题解  

    最新讨论

    • 暂时没有讨论

    题目描述

    有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分。(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了:

    公司A = 公司B。

    公司A拥有大于50%的公司B的股票。

    公司A控制K(K >= 1)个公司,记为C1, ..., CK,每个公司Ci拥有xi%的公司B的股票,并且x1+ .... + xK > 50%。

    给你一个表,每行包括三个数(i,j,p);表明公司i享有公司j的p%的股票。计算所有的数对(h,s),表明公司h控制公司s。至多有100个公司。

    写一个程序读入N组数(i,j,p),i,j和p是都在范围(1..100)的正整数,并且找出所有的数对(h,s),使得公司h控制公司s。

    输入输出格式

    输入格式:

    第一行: N,表明接下来三个数的数量,即(i,j,p)的数量。

    第二行到第N+1行: 每行三个整数作为一个三对数(i,j,p),表示i公司拥有j公司 p%的股份。

    输出格式:

    输出零个或更多个的控制其他公司的公司。每行包括两个整数A、B,表示A公司控制了B公司。将输出的数对以升序排列。

    请不要输出控制自己的公司(应该是不输出自己,互相控制的公司还是要输出的)。

    输入输出样例

    输入样例#1

    3

    1 2 80

    2 3 80

    3 1 20

    输出样例#1

    1 2

    1 3

    2 3

    说明

    翻译来自NOCOW

    USACO 2.3

    分析:一眼看上去觉得是搜索,根据题目描述,可以写成递归的形式,用一个数组记录一个公司对其他公司所能持有的股份,最后判断是否大于50即可.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int map[210][210], n,maxn,own[210],vis[210];
    
    void dfs(int x)
    {
        vis[x] = 1;
        for (int i = 1; i <= maxn; i++)
        {
            own[i] += map[x][i];
            if (own[i] > 50)
                if (!vis[i])
                    dfs(i);
        }
        return;
    }
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            int a, b, c;
            scanf("%d%d%d", &a, &b, &c);
            map[a][b] = c;
            maxn = max(maxn,max(a, b));
        }
        for (int i = 1; i <= maxn; i++)
        {
            memset(own, 0, sizeof(own));
            memset(vis, 0, sizeof(vis));
            dfs(i);
            for (int j = 1; j <= maxn; j++)
            {
                //printf("%d %d own%d
    ", i, j, own[j]);
                if (own[j] > 50 && i != j)
                    printf("%d %d
    ", i, j);
            }
        }
    
        //while (1);
        return 0;
    }
  • 相关阅读:
    SQL语句之奇形怪状的冷门函数
    计算累计收益
    关于SQL表字段值缺失的处理办法
    虚拟机移植到另一台机器
    分分钟搞懂rank() over(partition by)的使用
    分分钟搞懂union与union all
    【转】10分钟就能学会的.NET Core配置
    【转】依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题
    【转】Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法
    【转】在.net Core 中像以前那样的使用HttpContext.Current
  • 原文地址:https://www.cnblogs.com/zbtrs/p/5930783.html
Copyright © 2020-2023  润新知