洛谷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 ...
随机推荐
- 20155322 2017-2018-1《信息安全系统设计》第十周 课下作业-IPC
20155322 2017-2018-1<信息安全系统设计>课下作业-IPC 作业内容 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接. 共享内存 管 ...
- 2017-2018-1 20155329《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155329<信息安全技术>实验二--Windows口令破解 实验原理 口令破解方法 字典破解: 指通过破解者对管理员的了解,猜测其可能使用某些信息作为密码,利 ...
- DIRECT3D状态详解
Microsoft® Direct3D®设备是一个状态机.应用程序设置光照.渲染和变换模块的状态,然后在渲染时传递数据给它们. 本节描述图形流水线用到的所有不同类型的状态. 渲染状态 取样器状态 纹理 ...
- 【转载】OLE控件在Direct3D中的渲染方法
原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么 ...
- centOS上安装最新git 2.4.0
git 地址: https://www.kernel.org/pub/software/scm/git/ 1. 先安装一堆依赖 yum install curl curl-devel zlib-de ...
- 探寻ASP.NET MVC鲜为人知的奥秘(2):与Entity Framework配合,让异步贯穿始终
Why 在应用程序,尤其是互联网应用程序中,性能一直是很多大型网站的困扰,由于Web2.0时代的到来,人们更多的把应用程序从C/S结构迁移到B/S结构,这样会带来客户端轻量,部署.试试方便快捷等优势, ...
- oracle数据库应用性能优化经验(培训讲义)
这是我给公司同事做的内部培训ppt的讲义,给大家分享一下.这是培训大纲,ppt在找地方上传,等找到了会把链接发在这里 . 暂时放在csdn上,赚点下载积分:https://download.csdn. ...
- json_encode替代函数
<?php function jsonEncode($var) { if (function_exists('json_encode')) { return json ...
- JavaScript指定断点操作
什么是断点操作(Breakpoint action) 做前端开发的小伙伴,或许对这个断点操作不是很熟悉.不过你要是问其他语言(比如C,C++ ,C #等)的开发者,他们应该都挺熟悉断点操作,这种断点操 ...
- http-equiv=mobile-agent说明
Meta声明的格式:<meta http-equiv=”mobile-agent” content=”format=[wml|xhtml|html5]; url=url”> 比如: < ...