玄妙的搜索

题目描述

有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分。(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司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公司。将输出的数对以升序排列。

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


实际上我觉得这道题还是挺不错的,不过这个题面真是好生奇怪……网络上也找不到usaco的英文题面(官网上要求每一个section顺序做过去……)

大体就是搜索,然后这里的搜索在处理上还是需要一定思考的。因为如果搜索顺序不当会使得部分股份被一组关系复杂的公司重复累加。

做这题时候test9老是出锅……网上很多人都说“一个编号对应的公司不是唯一的”?这是什么意思啊……

这是WA掉的

 #include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
};
int n,tot,mp[][];
bool vis[];
node ss[];
bool cmp(node a, node b)
{
if (a.a==b.a)return a.b<b.b;
return a.a<b.a;
}
void dfs(int x)
{
if (vis[x])return;
bool visp[];
memset(visp, , sizeof(visp));
visp[x] = ;vis[x] = ;
int s = ;
for (int i=; i<=; i++)
if (!visp[i]&&mp[x][i]>){s=i;break;}
while (s)
{
visp[s] = ;
for (int i=; i<=; i++)
mp[x][i]+=mp[s][i];
ss[++tot].a=x;ss[tot].b=s;
dfs(s);
s = ;
for (int i=; i<=; i++)
if (!visp[i]&&mp[x][i]>){s=i;break;}
}
return;
}
int main()
{
scanf("%d",&n);
// freopen("lg1475.out","w",stdout);
for (int i=; i<=n; i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
mp[x][y] = z;
}
for (int i=; i<=; i++)if (!vis[i])dfs(i);
sort(ss+, ss+tot+, cmp);
for (int i=; i<=tot; i++)printf("%d %d\n",ss[i].a,ss[i].b);
return ;
}

这就AC了

#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
};
int n,tot,mp[][];
bool vis[][];
node ss[];
bool cmp(node a, node b)
{
if (a.a==b.a)return a.b<b.b;
return a.a<b.a;
}
void dfs(int x, int y)
{
if (vis[x][y])return;
vis[x][y] = ;
if (x!=y){
ss[++tot].a = x;
ss[tot].b = y;
}
for (int i=; i<=; i++)
{
mp[x][i] += mp[y][i];
if (mp[x][i]>)dfs(x, i);
}
return;
}
int main()
{
scanf("%d",&n);
for (int i=; i<=n; i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
mp[x][y] = z;
}
for (int i=; i<=; i++)
for (int j=; j<=; j++)
if (mp[i][j]>)dfs(i, j);
sort(ss+, ss+tot+, cmp);
for (int i=; i<=tot; i++)printf("%d %d\n",ss[i].a,ss[i].b);
return ;
}

以上,先存着

【图论】[USACO]控制公司 Controlling Companies的更多相关文章

  1. USACO 控制公司 Controlling Companies

    友情链接神犇520的博客 题目: 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了 ...

  2. 洛谷P1475 控制公司 Controlling Companies

    P1475 控制公司 Controlling Companies 66通过 158提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 ...

  3. 洛谷——P1475 控制公司 Controlling Companies

    P1475 控制公司 Controlling Companies 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条 ...

  4. 控制公司 Controlling Companies

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

  5. 【USACO 2.3】Controlling Companies (递推)

    题意:A公司对B公司有控制权的条件是满足下面条件之一:A=B,A对B的股份超过50%,A控制的公司对B的股份之和超过50%. 分析:我把控制关系分个等级:第一级是直接的股份超过50%,第二级是至少需要 ...

  6. USACO Section 2.3: Controlling Companies

    这题的dp里的check里的函数要考虑k control i control j和i control j control k的情况 /* ID: yingzho1 LANG: C++ TASK: co ...

  7. USACO Section2.3 Controlling Companies 解题报告 【icedream61】

    concom解题报告------------------------------------------------------------------------------------------ ...

  8. USACO Training刷题记录 By cellur925

    Section 1.1 Your Ride Is Here 貌似没啥可说 Greedy Gift Givers 上来就想stl map映射,有两个坑:如果送给别人的人数为0,那么需要特判一下,防止整数 ...

  9. Codevs 1242 布局 2005年USACO(差分约束)

    1242 布局 2005年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...

随机推荐

  1. 2 - Bootstrap-引导类-Bootstrap/ServerBootstrap

    2.1 ChannelOption和属性 //设置属性 bootstrap.option("xxx", 1231231); bootstrap.attr("xxx&quo ...

  2. 关于SQL Server数据库中的标识列

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型 2.在进行插入(Insert)操作时,该列的值 ...

  3. 白话SpringCloud | 第零章:前言

    说在前面 大清早醒来,觉得睡不着了.还是起来,写写博客.但最后发现关于SpringBoot的安全相关的还是比较多内容的,也比较专业,怕是一个多小时完不成的,也罢,那就来写写关于SpringCloud前 ...

  4. 傻瓜式的go modules的讲解和代码,及gomod能不能引入另一个gomod和gomod的use of internal package xxxx not allowed

    一 国内关于gomod的文章,哪怕是使用了百度 -csdn,依然全是理论,虽然golang的使用者大多是大神但是也有像我这样的的弱鸡是不是? 所以,我就写个傻瓜式教程了. github地址:https ...

  5. 16.Ubuntu LTS 16.04安装搜狗输入法全过程记录(纯新手)

    这是我第四次打算转到Ubuntu上了,应该不会像以前那样装个系统就拜拜了.打算先把C和Vim重新学起来,数据结构那本书看完写完,第二步是学python和算法导论,暂定如此. 昨天晚上系统装完以后想着要 ...

  6. OC 中 self 与 super 总结

    一段代码引发的思考: @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"% ...

  7. 解决在eclipse中导入项目名称已存在的有关问题

    新建项目-Import-File System-找到相应的文件夹-Overwrite existing resources without warning打钩,选中项目即可

  8. 阐述简称PO,VO,TO,BO,DAO,POJO

    PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中 ...

  9. MySQL JOIN | 联结

    联结是利用SQL的SELECT能执行的最重要的操作.为了提高存储的有效性和避免数据冗余,往往会将有关联的数据存储在好几张表中,那么怎样用一条SELECT语句就能检索出这些数据呢? 答案是JOIN(联结 ...

  10. JQuery初识(二)

    一丶链式编程 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...