【图论】[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 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...
随机推荐
- HttpResponseCache的使用缓存cache
为什么要用cache? 我们可以通过传递类似上次更新时间这样的参数来制定查询某些数据.同样,在下载图片的时候,server那边最好能够减少图片的大小,而不是让我们下载完整大小的图片. 之前我们在软件开 ...
- linux下各种格式软件的安装(引用http://blog.csdn.net/zyz511919766/article/details/7574040)
首先介绍两个简单的方式 第一:sudo apt-get install packagename 命令 如果我们知道我们要安装的软件的确切的名称,那么我们可以简单的通过此条命令来获取和安装软件.apt- ...
- (转)Linux命令学习总结:dos2unix - unix2dos
Linux命令学习总结:dos2unix - unix2dos 命令简介: 原文:http://www.cnblogs.com/kerrycode/p/5077969.html dos2unix是将W ...
- Promise 用es5的基础实现
只实现 then 和 catch function promise(fn) { var state = 'pending'; // 声明函数 var nowResolve = function (ar ...
- 实现多行文字居中方法(兼容IE6)
<p class="mulit_line"> <span style="font-size:12px;">这里是高度为150像素的标签内 ...
- 基于android-uitableview扩展-uilistview项目
这个项目是正如标题说的那样,是基于uitableview项目为基础进行二次封装的,目的是实现更多的展现形式,项目地址:点击打开 不过,这个使用起来你还必须得会用uitableview扩展(项目地址:点 ...
- spring的工厂方法
http://blog.csdn.net/nvd11/article/details/51542360
- 有关 C# 命名参数和可选参数
有关 C# 命名参数和可选参数 #1.命名参数: 所谓“命名参数 ( Named Arguments )”,是指方法中定义了一些“有名字”的参数. 给方法参数命名之后,在调用方法时就可以直接根据参数名 ...
- DB2数据库备份还原
恢复及备份NC DB2数据库步 一. 安装DB2数据库 解压db2v9.5ins.rar安装,在写此文档时客户一般用的是9.5: 注意不要将db2安装到系统盘: 二. Windows版本 1.数据库备 ...
- Vultr VPS建站攻略 – 一键安装LNMP无面板高性能WEB环境
在"Vultr VPS建站攻略 - 一键安装宝塔面板架设LNMP/LAMP Web环境"文章中,VULTR中文网分享到我们常用的可视化面板宝塔面板安装在VULTR VPS主机中建站 ...