【图论】[USACO]控制公司 Controlling Companies
玄妙的搜索
题目描述
有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分。(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司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的更多相关文章
- USACO 控制公司 Controlling Companies
友情链接神犇520的博客 题目: 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了 ...
- 洛谷P1475 控制公司 Controlling Companies
P1475 控制公司 Controlling Companies 66通过 158提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 ...
- 洛谷——P1475 控制公司 Controlling Companies
P1475 控制公司 Controlling Companies 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条 ...
- 控制公司 Controlling Companies
题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了: 公司A = 公司B. 公司A拥 ...
- 【USACO 2.3】Controlling Companies (递推)
题意:A公司对B公司有控制权的条件是满足下面条件之一:A=B,A对B的股份超过50%,A控制的公司对B的股份之和超过50%. 分析:我把控制关系分个等级:第一级是直接的股份超过50%,第二级是至少需要 ...
- USACO Section 2.3: Controlling Companies
这题的dp里的check里的函数要考虑k control i control j和i control j control k的情况 /* ID: yingzho1 LANG: C++ TASK: co ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Training刷题记录 By cellur925
Section 1.1 Your Ride Is Here 貌似没啥可说 Greedy Gift Givers 上来就想stl map映射,有两个坑:如果送给别人的人数为0,那么需要特判一下,防止整数 ...
- Codevs 1242 布局 2005年USACO(差分约束)
1242 布局 2005年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...
随机推荐
- 项目 06 Bootstrap
项目班 06 Bootstrap 一.介绍 #基于HTML,CSS,JS的简洁灵活的流行前端框架及交互组件集 #为快速WEB开发提供了一套前端工具包,包括布局.网格.表格.按钮.表单.导航.提示等等 ...
- c# log4Net 详细说明
转载 http://www.cnblogs.com/kissazi2/p/3392605.html
- BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树
既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...
- python_魔法方法(六):迭代器和生成器
迭代器 自始至终,都有一个概念一直在用,但是我们却没来都没有人在的深入剖析它.这个概念就是迭代. 迭代的意思有点类似循环,每一次的重复的过程被称为迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭 ...
- UiAutomator环境配置
前提:下载jdk以及adt 一.配置java开发环境 1.新建系统变量 -——变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0_80 2.编辑 ...
- 偶遇bash 的while read line 的问题
自己开发的过程中,我从数据库里读出来一个值,写入某个临时文件,再让脚本做 cat tmp.log |while read line 的时候 readline每次都是少一行, 最后发现,是换行符的问题 ...
- Maven配置默认JDK/JRE版本
1. settings.xml的profiles标签下配置 <profile> <id>jdk-1.8</id> <activation> <ac ...
- AOP注解方式
Aop, aspect object programming 面向切面编程 功能: 让关注点代码与业务代码分离! 关注点, 重复代码就叫做关注点: 切面, 关注点形成的类,就叫切面(类)! 面向切 ...
- Spring Cloud 服务发现和消费
服务的发现和消费 有了服务中心和服务提供者,下面我们来实现一个服务的消费者: 服务消费者主要完成两个任务——服务的发现和服务的消费,服务发现的任务是由Eureka客户端完成,而服务消费的任务是由Rib ...
- hibernate课程 初探单表映射1-9 创建关系映射文件
创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...