洛谷P3656 展翅翱翔之时 (はばたきのとき)(洛谷2017.3月赛round1 t4)
题目背景
船が往くよミライへ旅立とう
船只启航 朝未来展开旅途
青い空笑ってる(なにがしたい?)
湛蓝天空露出微笑(想做些什么?)
ヒカリになろうミライを照らしたい
化作光芒吧 想就此照亮未来
輝きは心からあふれ出してもっと先の景色望むんだ
光辉自内心满溢而出 愿能望见更加前方的景色
Ah!やっと手にしたミライチケットかざして…!
Ah!挥舞起终于得手的未来门票…!
我们Aqours,终于闪闪发亮了!
2月25和26日,将是我们登上横滨ARENA演唱的日子!
而且,还要在全日本、甚至全世界的好多影院进行转播呢!
转播好像还是通过中继卫星传输的呢!
未来ずら!
题目描述
不过,好像中继卫星上,出了一些问题呢……
我们的中继卫星一共有N颗,编号成1到N。不过,好像一个中继卫星可以且仅可以单向地从另一颗中继卫星那儿接收数据。
第i颗卫星现在已经被设定到了从第Ai颗卫星 (称为接收源) 那儿接受数据。
不过这些中继卫星的接收源是可以修改的,只不过每次修改要花一定的资金呢。
听说要达成中继的话,这些卫星之间必须两两之间能够互相(直接或间接)通信才行啊。
虽然鞠莉家里很有钱,可是这么大的花费,也得提前准备一下呢。
所以,你能帮我们算算这样子一共最少要花多少钱吗?
输入输出格式
输入格式:
第一行1个整数N。
接下来N行,每行2个整数Ai,Ci,表示初始时,第i个中继卫星从第Ai颗卫星处接收数据,以及该卫星调整接收源的所需花费。
输出格式:
输出一个整数,表示鞠莉所需准备的最小的花费。
输入输出样例
4
2 2
1 6
1 3
3 1
5
说明
10% N<=10
40% N<=15
70% N<=3000
100% 2<=N<=100000, 1<=Ci<=10^9
以下是彩蛋
事实上LoveLive的直播卫星中继只有一颗星,而且永远都是不加密的。
导致只要有一个卫星锅就可以在家偷偷看直播,也就是传说中的卫星源。
lin_toto: 万代南梦宫都把浅水湾给买了,居然只有回放,只好跑到香港the sky去看+手动滑稽。
至于为什么看转播,eplus表示LoveLive系列演唱会的票大家尽管抽选尽管抢,买得到算我输。
于是lin_toto在去年μ's Final LoveLive的时候拿肉鸡把eplus搞趴下了,然后就买到了。
于是今年eplus连抢票都不让抢了,全抽选,抽得到算我输。
然后lin_toto就去看转播了。
大概是个贪心乱搞题。
先把所有的连有多条边的点上费用较小的边删去,使只剩一条边。
这时可能还有环,然后在环上讨论一下是选环上的最小边还是重新加上以前删掉的某条边再去掉那个点相邻的环上的边,这样乱搞一搞就好了。
然后要特判的就是如果整个图就是一个环,ans=0
吐槽:月赛的时候没开int64,挂成40;后来改了int64,80,怀疑自己算法错了;然后发现自己特判整个图是一个环的时候直接用所有点入度出度都是1判断了,所以就把多个环也判成一个环了;于是然后加了个并查集,过了。
program rrr(input,output);
const
inf=;
type
etype=record
t,next:longint;
w:int64;
end;
var
e:array[..]of etype;
a,b,siz,father:array[..]of longint;
c:array[..]of int64;
n,i,j,k,cnt:longint;
ans,max,mmax,min:int64;
flag:boolean;
v,vis:array[..]of boolean;
procedure add(x,y:longint;w:int64);
begin
inc(cnt);e[cnt].t:=y;e[cnt].w:=w;e[cnt].next:=a[x];a[x]:=cnt;
end;
function find(k:longint):longint;
begin
if father[k]=k then exit(k);
father[k]:=find(father[k]);
exit(father[k]);
end;
begin
assign(input,'r.in');assign(output,'r.out');reset(input);rewrite(output);
readln(n);
fillchar(a,sizeof(a),);cnt:=;fillchar(siz,sizeof(siz),);
for i:= to n do begin readln(b[i],c[i]);inc(siz[b[i]]);add(b[i],i,c[i]); end;
flag:=true;
ans:=;
for i:= to n do
if a[i]<> then
begin
j:=a[i];max:=;
while j<> do
begin
ans:=ans+e[j].w;
if e[j].w>max then begin k:=e[j].t;max:=e[j].w; end;
j:=e[j].next;
end;
ans:=ans-max;
j:=a[i];
while j<> do begin if e[j].t<>k then b[e[j].t]:=;j:=e[j].next; end;
end
else flag:=false;
if flag then
begin
for i:= to n do father[i]:=i;
for i:= to n do
begin
j:=find(i);k:=find(b[i]);
if j<>k then father[j]:=k;
end;
flag:=true;
for i:= to n do if find(i)<>find() then begin flag:=false;break; end;
if flag then begin write();halt; end;
end;
fillchar(v,sizeof(v),false);
fillchar(vis,sizeof(vis),false);
for i:= to n do
if not v[i] then
begin
j:=i;flag:=false;
while true do
begin
if vis[j] then begin flag:=true;break; end;
if v[j] then break;
v[j]:=true;vis[j]:=true;
if b[j]= then break else j:=b[j];
end;
k:=i;while vis[k] do begin vis[k]:=false;k:=b[k]; end;
if not flag then continue;
min:=inf;
while not vis[j] do
begin
vis[j]:=true;
if c[j]<min then min:=c[j];
if siz[j]> then
begin
mmax:=;max:=;
k:=a[j];
while k<> do
begin
if e[k].w>mmax then begin max:=mmax;mmax:=e[k].w end
else if e[k].w>max then max:=e[k].w;
k:=e[k].next;
end;
if mmax-max<min then min:=mmax-max;
end;
j:=b[j];
end;
ans:=ans+min;
while vis[j] do begin vis[j]:=false;j:=b[j];end;
end;
write(ans);
close(input);close(output);
end.
洛谷P3656 展翅翱翔之时 (はばたきのとき)(洛谷2017.3月赛round1 t4)的更多相关文章
- 【洛谷P3651】展翅翱翔之时
难以吐槽出题人的中二病…… 这题有点类似ZJOI2008 骑士,先跑树上的,最后拆环即可. #include<bits/stdc++.h> #define N 100005 typedef ...
- luogu3651 展翅翱翔之时 (はばたきのとき)[基环树+贪心]
考前随便做点水题愉♂悦身心 有助于退役 这题意思其实就是说要把外向基环树森林改成一个环的最小代价. 依照套路,先对每棵基环树的树做dp,这里因为要是环,要把所有的树都拆成链,然后连接.所以考虑以最小代 ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
- (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...
- 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp
洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- (洛谷P2512||bzoj1045) [HAOI2008]糖果传递 || 洛谷P4016 负载平衡问题 || UVA11300 Spreading the Wealth || (洛谷P3156||bzoj3293) [CQOI2011]分金币
bzoj1045 洛谷P4016 洛谷P2512 bzoj3293 洛谷P3156 题解:https://www.luogu.org/blog/LittleRewriter/solution-p251 ...
随机推荐
- 2017-2018-1 20155321《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155321<信息安全技术>实验二--Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...
- 20155323 2016-2017-2 《Java程序设计》第9周学习总结
20155323 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操 ...
- html 第一行不缩进,第二行缩进,文字对齐
<p style="text-indent: -7rem;margin-left: 7rem;"> <img src="images/记录要求.png& ...
- 【NOIP2018pj】题解
[NOIP2018pj]题解 \(T1\) 题面 洛谷 题解 好像并没有什么好说的... #include <iostream> #include <cstdio> #incl ...
- windows下安装,配置redis以及可视化客户端redisClient的安装及基本使用
一. Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情 ...
- ios 9.1以后 添加libz.dylib 方法
1. 进入你项目的build phases 2.点击+号在弹出的对话框选择addother 3.在弹出的对话框中输入"cmd"+"shift"+"g& ...
- 《手把手教你学DSP-基于TMS320F28335》书中的错误
1. 在书的345页,这种字符串写法是错误的,char *msg. 2. 估计张卿杰可能是个学着.书的风格感觉就是翻译的PDF文档.
- 简单读取 properties文件
看了网上很多读取的方法,都太过复杂,直接使用下面的方法就可以简单读取 properties文件了 ide使用idea 测试读取成功 import java.util.ResourceBundle; p ...
- 自己通过Cygwin编译的windowsx86下的更新至4.0.1
采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...
- windows下如何将Python文件打包成.exe可执行文件
在使用Python做开发的时候,时不时会给自己编写了一些小工具辅助自己的工作,但是由于开发依赖环境问题,多数只能在自己电脑上运行,拿到其它电脑后就没法运行了.这显得很不方便,不符合我们的初衷,那么有没 ...