【图论】[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 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...
随机推荐
- express知识点
本篇文章主要内容 1.用Express在系统文件夹内搭建一个服务器 2.Express的路由(来自 Express 文档) 3.Express的中间件(这才是关键) 4.Express的一些零碎的知识 ...
- Mediator模式(仲裁者设计模式)
Mediator ? Mediator的意思是"仲裁者""中介者".一方面,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者.当仲裁者 ...
- Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)
Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...
- Problem D. Dwarf Tower spfa
http://codeforces.com/gym/100269/attachments 首先建图,然后图中每条边的权值是会变化的,是由dis[x] + dis[y] ---> dis[m ...
- 【Java】国内maven私服
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...
- redis数据类型--个人常规用法
一.String 1.可以容纳最高512M的value. 2.经常用于通过expire来实现自动过期的一些值,直接通过setex 来. 3.通过incrby的方式,来实现value值得增长. 4.执行 ...
- c++11 多线程入门教程(一)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10945309.html 最近在找c++服务端开发的实习(大佬们有推荐吗QAQ..),恰好写了一 ...
- java下的串口通信-RXTX
关于java实现的串口通信,使用的是开源项目RXTX,之前sun公司也有JCL项目,不过已经很久没有更新了,RXTX项目地址:点击打开,但是两个项目的API用法是一样的,只是导入的包不一样而已.简单的 ...
- *.rpm is not signed解决
1.# yum install qemu*报错如下:Package qemu-kvm-tools-0.12.1.2-2.113.el6.x86_64.rpm is not signed2.解决# vi ...
- Canny边缘检测学习
Canny边缘检测学习:http://www.open-open.com/lib/view/open1453460512558.html 高斯滤波学习:http://www.cnblogs.com/q ...