洛谷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 ...
随机推荐
- BZOJ1208_宠物收养所_KEY
题目传送门 平衡树的题. 因为题目给出条件(其实自己也知道):同一时间呆在收养所中的,要么全是宠物,要么全是领养者,这些宠物和领养者的个数不会超过10000个. 所以只要维护一颗平衡树,它的里面要不全 ...
- RHCSA day5
4.调整逻辑卷容量 请按照以下要求调整本地逻辑卷lvm1的容量: 调整后的逻辑卷及文件系统大小为770MiB 调整后确保文件系统中已存在的内容不能被破坏 调整后的容量可能出现误差,只要在730MiB ...
- 【LG1445】樱花
[LG1445]樱花 题面 洛谷 题解 \[ \frac 1x+\frac 1y=\frac 1{n!}\\ \frac{x+y}{xy}=\frac 1{n!}\\ n!(x+y)=xy\\ xy- ...
- 字典(dict)的反转
1.今天在写12306查询余票时,想给定字典(dict)的值,从而得到字典(dict)的键,但好像字典(dict)方法中没有与此相关的方法,只能退而求其次,反转字典(dict),将原字典(dict)的 ...
- Lambada表达式的作用
Lambda函数的用处 假设你设计了一个地址簿的类.现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合.要是你为这些情况都写个函数,那么你一定就跪了.所以你应该提 ...
- QQ在线交谈一句代码搞定
现在有很多网页都有QQ在线咨询,还有什么QQ客服什么的,看着很高大上的一个功能,其实要实现很简单,只需要一句代码就搞定. 还是按以前的套路,先看效果图,再晒源代码 点击图标 再点击 就可以聊天了 再来 ...
- RetinaNet 迁移学习到自标数据集
Keras-RetinaNet 在自标数据集 alidq 上训练 detection model RetinaNet 模型部署与环境配置 参考README 数据预处理 数据统计信息: 类别:gun1, ...
- 机器学习之决策树(ID3)算法
最近刚把<机器学习实战>中的决策树过了一遍,接下来通过书中的实例,来温习决策树构造算法中的ID3算法. 海洋生物数据: 不浮出水面是否可以生存 是否有脚蹼 属于鱼类 1 是 是 是 2 ...
- KNY团队与“易校”小程序介绍
一.团队介绍 “KNY”团队是软件工程专业中的一支充满了斗志,充满了自信的队伍,由三人组成,每个队员都在为我们共同一致的目标而努力:我们三个人的小程序的知识都相对薄弱,但我们不甘落后,一直在努力的学习 ...
- winform default模式下和英文模式下 修改问题
1.修改控件大小.位置等属性在default模式下修改: 2.修改控件属性最好不要做鼠标拖动放大,拖动修改位置等,建议用属性栏中的数字来改变.