concom解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  有至多100个公司,每个公司可能会有很多子公司,请你输出每个公司有哪些子公司。
  B是A的子公司,有以下两种情况:
    1. A拥有B超过50%的股份
    2. A某些子公司(包括A自己)各拥有的B的股份加起来,超过50%
【输入格式】
  第一行n,表示有n个股份关系。
  有n行,每行给出三个数u,v,c,表示u公司拥有v公司c%的股份。
【输出格式】
  每一行(u,v)表示v是u的子公司。
  输出所有的(u,v),保证u升序,然后再保证v升序。
【输入样例】
  3
  1 2 80
  2 3 80
  3 1 20
【输出样例】
  1 2
  1 3
  2 3
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  建个图,在里面用SPFA(Bellman-Ford)的思路来求解。不了解SPFA的同学,可以去看我之前的文章:“《算法》C++代码 SPFA”。

  把所有公司建成一个图,u拥有v股份c,就连一条边(u,v)=c。
  我们依次判断每个公司拥有哪些子公司。

  假设我们现在在考虑S公司,那么步骤如下:
    1. 开始只有S公司自己,设为集合A。
    2. 进入死循环1号,令p=false
    3. 枚举所有集合A外的公司v,对每个v:
      2.1 设s=0
      2.2 枚举所有集合A内的公司u,若存在边(u,v)=c,则s+=c。
      2.3 若s>50,说明v是S的子公司,并把v加入集合A,令p=true
    3. 若p==true,则说明此轮发现了新的子公司,什么也不做,回归死循环1号;若p==false,则说明此轮并未发现子公司,那么退出死循环1号
    4. 至此,集合A便是S的所有子公司(包括S自己),按照升序输出即可
  而外围,只要保证所考虑的S公司也是升序,就可以保证最终结果完全升序了。

  分析时间,100个公司,而每个公司死循环1号执行一轮的时间是100,每轮至少找到一个子公司,因此死循环1号至多执行100轮。
  总计时间:100*100*100=1000000,没问题。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  第二次AC。
  第一次没保证每个公司的子公司是升序输出的-.-

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

【代码】

 /*
ID: icedrea1
PROB: concom
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; const int N=;
bool have[+N]; int E[+N][+N]; void look(int S,ostream& out)
{
int A[N],Ai=,Aj=;
bool IN[+N]={},R[+N]={};
A[Aj++]=S; IN[S]=true;
while(true)
{
bool p=false;
for(int v=;v<=N;++v)
if(have[v] && !IN[v])
{
int s=;
for(int i=Ai;i!=Aj;++i)
{
int u=A[i]; s+=E[u][v];
}
if(s>)
{
R[v]=true;
A[Aj++]=v; IN[v]=true;
p=true;
}
}
if(p==false) break;
}
for(int i=;i<=N;++i)
if(R[i]) out<<S<<' '<<i<<endl;
} int main()
{
ifstream in("concom.in");
ofstream out("concom.out"); int M; in>>M;
for(int i=,u,v,c;i<=M;++i) { in>>u>>v>>c; have[u]=have[v]=true; E[u][v]=c; } for(int i=;i<=N;++i)
if(have[i]) look(i,out); in.close();
out.close();
return ;
}

USACO Section2.3 Controlling Companies 解题报告 【icedream61】的更多相关文章

  1. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section2.1 Ordered Fractions 解题报告

    frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  3. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  4. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

  5. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告----------------------------------------------------------------------------------------- ...

  6. USACO Section2.3 Money Systems 解题报告 【icedream61】

    money解题报告------------------------------------------------------------------------------------------- ...

  7. USACO Section2.3 Zero Sum 解题报告 【icedream61】

    zerosum解题报告----------------------------------------------------------------------------------------- ...

  8. USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】

    nocows解题报告------------------------------------------------------------------------------------------ ...

  9. USACO Section2.3 Longest Prefix 解题报告 【icedream61】

    prefix解题报告------------------------------------------------------------------------------------------ ...

随机推荐

  1. Linux远程桌面管理

    一: (1)查看用户  Linux系统root用户可强制踢制其它登录用户,首先可用w命令查看登录用户信息 [root@ylLinux~]:# w (2)强制踢人 命令格式:pkill -kill -t ...

  2. Torch.no_grad()影响MSE损失

    相关描述 https://discuss.pytorch.org/t/torch-no-grad-affecting-outputs-loss/28595/3 今天在训练网络的时候,发现mseloss ...

  3. 【JavaScript 封装库】BETA 4.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  4. Java访问重定向接口

    背景:开发做了一个免登陆的接口,方便我后续给管理后台做一些小工具,问题来了,给的免登陆接口是个302如图的test_login,在重定向一个200的接口(eload_admin), 原本开始这样做:0 ...

  5. 使用正则表达式验证IP地址

    实现效果: 知识运用: 实现代码: public bool validate(string str_IP) { string regex = @"(25[0-5]|2[0-4]\d|[0-1 ...

  6. 如何在Linux中显示和设置主机名

    原文链接 随着连接到网络的计算机数量越来越多,每一台计算机都需要有一个属性来区别于其它计算机.和现实世界中的人一样,计算机也有一个叫做hostname(主机名)的属性. 什么是hostname 从它的 ...

  7. rectified units

    from: http://en.wikipedia.org/wiki/Rectifier_(neural_networks) In the context of artificial neural n ...

  8. IDEA 安装配置及操作总结(新手必看)

    Jetbrains官网下载IDEA15 我们在浏览器输入网址https://www.jetbrains.com/.选择相应的系统版本,下载最新版本的IDEA15,Windows系统双击安装文件,根据界 ...

  9. 2018/7/16 YMOI模拟 NOIP2013D2T3华容道

    题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. ...

  10. Mybatis基础入门学习

    Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...