【图论】[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 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...
随机推荐
- luogu P5142 区间方差 十分优美的线段树
又来了个维护方差的线段树.... 大致推导过程(字丑多包涵QAQ) 注意取模时要加一些100000007防止出现负数.. #include<cstdio> #include<iost ...
- Codeforces Round #363 (Div. 2) B
Description You are given a description of a depot. It is a rectangular checkered field of n × m siz ...
- 牛客网训练赛26D(xor)
题目链接:https://www.nowcoder.com/acm/contest/180/D 线性基的学习:https://www.cnblogs.com/vb4896/p/6149022.html ...
- (转)linux自定义开机启动服务和chkconfig使用方法
原文:https://www.cnblogs.com/jimeper/archive/2013/03/12/2955687.html linux自定义开机启动服务和chkconfig使用方法 1. 服 ...
- 三,JVM 自带命令行工具之JMap
jmap:java内存映像工具 jmap(Memory Map for java ) 命令用于生成堆转储快照(一般被称为headdump 或dump文件) jmap命令格式:jmap [option ...
- js电话号码校验
var contact_phone = $("#contact_phone").val(); if(contact_phone && /^1[3|4| ...
- Spring和springMVC父子容器的关系
部分转载自:https://www.cnblogs.com/ljdblog/p/7461854.html springMVC容器和Spring容器 为什么一定要在web.xml中配置spring的li ...
- Java操作Excel之POI简单例子
/** * 利用POI操作Excel表单 * * 需要jar包: * HSSF针对03及以前版本,即.xls后缀 * |---poi-3.16.jar * XSSF针对07及以后版本,即xlsx后缀 ...
- SpringMVC08AnnotationException 注解异常
1.配置web.xml文件 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3// ...
- flask--数据库连接--URL
使用URL制定数据库 数据库引擎 URL MySQL mysql://username:password@hostname/database Postgres postgresql://usernam ...