展翅翱翔之时(はばたきのとき)⁡\operatorname{展翅翱翔之时 (はばたきのとき)}展翅翱翔之时(はばたきのとき)

题目链接:luogu P3651⁡\operatorname{luogu\ P3651}luogu P3651

题目背景

船が往くよミライへ旅立とう

船只启航 朝未来展开旅途

青い空笑ってる(なにがしたい?)

湛蓝天空露出微笑(想做些什么?)

ヒカリになろうミライを照らしたい

化作光芒吧 想就此照亮未来

輝きは心からあふれ出してもっと先の景色望むんだ

光辉自内心满溢而出 愿能望见更加前方的景色

Ah!やっと手にしたミライチケットかざして…!

Ah!挥舞起终于得手的未来门票…!

我们Aqours,终于闪闪发亮了!

2月25和26日,将是我们登上横滨ARENA演唱的日子!

而且,还要在全日本、甚至全世界的好多影院进行转播呢!

转播好像还是通过中继卫星传输的呢!

未来ずら!

题目

不过,好像中继卫星上,出了一些问题呢……

我们的中继卫星一共有 NNN 颗,编号成 111 到 NNN 。不过,好像一个中继卫星可以且仅可以单向地从另一颗中继卫星那儿接收数据。

第 iii 颗卫星现在已经被设定到了从第 AiA_iAi​ 颗卫星 (称为接收源) 那儿接受数据。

不过这些中继卫星的接收源是可以修改的,只不过每次修改要花一定的资金呢。

听说要达成中继的话,这些卫星之间必须两两之间能够互相(直接或间接)通信才行啊。

虽然鞠莉家里很有钱,可是这么大的花费,也得提前准备一下呢。

所以,你能帮我们算算这样子一共最少要花多少钱吗?

输入

第一行 111 个整数 NNN 。

接下来 NNN 行,每行 222 个整数 Ai,CiA_i,C_iAi​,Ci​ ,表示初始时,第 iii 个中继卫星从第 AiA_iAi​ 颗卫星处接收数据,以及该卫星调整接收源的所需花费。

输出

输出一个整数,表示鞠莉所需准备的最小的花费。

样例输入

4
2 2
1 6
1 3
3 1

样例输出

5

数据范围

10%N<=1010\%\ N<=1010% N<=10
40%N<=1540\%\ N<=1540% N<=15
70%N<=300070\%\ N<=300070% N<=3000
100%2<=N<=100000,1<=Ci<=109100\%\ 2<=N<=100000, 1<=C_i<=10^9100% 2<=N<=100000,1<=Ci​<=109

以下是彩蛋

事实上LoveLive的直播卫星中继只有一颗星,而且永远都是不加密的。

导致只要有一个卫星锅就可以在家偷偷看直播,也就是传说中的卫星源。

lin_toto: 万代南梦宫都把浅水湾给买了,居然只有回放,只好跑到香港the sky去看+手动滑稽。

至于为什么看转播,eplus表示LoveLive系列演唱会的票大家尽管抽选尽管抢,买得到算我输。

于是lin_toto在去年μ’s Final LoveLive的时候拿肉鸡把eplus搞趴下了,然后就买到了。

于是今年eplus连抢票都不让抢了,全抽选,抽得到算我输。

然后lin_toto就去看转播了。

思路

这道题是一道贪心,还用了个叫做“环套树”的东西。
(这个东西好像也叫做“基环树”)

我们把 xxx 依赖 yyy 看做 yyy 连向 xxx 。那就每个点的入度都是一,那就一定是环套树。
而我们最后其实就是要让这个图最后变成一个环。

那我们就可以把每一棵环套树都变成一些链,然后再把链头尾相连,就可以变成环了。
那对于每一个点,我们就贪心保留它费用最大的那个出边,其它的后换掉。

我们先找环,然后存在一个数组里面。( 我用 chan[i]chan[i]chan[i] 来存)
然后每个点就贪心保留它费用最大的出边。
那我们就可以处理到只剩环和环上的点连出来的一些链。

那我们就还要处理环。
我们维护两个值:一个是不断开环的费用 ncutncutncut ,另一个是断开环的费用 cutcutcut 。
我们要求出 cutcutcut ,就两种选择,断开连入点的边或者这个点连上的链。
那断开连入点的边可以在之前的不是断开的情况下断,也可以在原来就断开的情况下断(就变成很多个链)。
而我们要求出 ncutncutncut ,就只能断开这个点连上的链。
(因为这样断开环还是环,不是环的它还不是环,不会有影响)

那就把每次把答案加上 cutcutcut 。

代码

#include<cstdio>
#include<iostream>
#define ll long longusing namespace std;struct node {ll x, to, nxt;
}e[100001];
ll n, x, y, le[100001], KK, tim[100001], from[100001];
ll tot, chan[100001], to[100001], ans;
bool in[100001];void add(ll x, ll y, ll z) {e[++KK] = (node){z, y, le[x]}; le[x] = KK;
}void runtree(ll now) {//找到环while (!tim[now]) {//之前没有过这个点tim[now] = 1;now = from[now];}while (tim[now] == 1) {//之前到过一次tim[now] = 2;chan[++tot] = now;//记录环的每个点now = from[now];}
}void dfs(ll now, ll fromther) {//dfsin[now] = 1;for (ll i = le[now]; i; i = e[i].nxt)if (e[i].to != fromther && tim[e[i].to] != 2) {dfs(e[i].to, now);if (e[to[now]].x > e[i].x) ans += e[i].x;//求出剪开所需费用else {ans += e[to[now]].x;to[now] = i;}}
} int main() {scanf("%lld", &n);//读入for (ll i = 1; i <= n; i++) {scanf("%lld %lld", &x, &y);//读入from[i] = x;//记录并建图add(x, i, y);}for (ll i = 1; i <= n; i++)if (!in[i]) {tot = 0;runtree(i);//遍历图if (tot == n) {//直接是一个环包括所有点printf("0");return 0;}for (ll j = 1; j <= tot; j++)dfs(chan[j], 0);//dfs处理树ll ncut = 0, cut = 2147483647;for (ll j = 1; j <= tot; j++) {//枚举每个环上的点cut = min(min(ncut, cut) + e[chan[j]].x, cut + e[to[from[chan[j]]]].x);//切开需要的费用(两个地方可以切)ncut += e[to[from[chan[j]]]].x;//不切开环}ans += cut;//答案加上断开环要的费用}printf("%lld", ans);//输出return 0;
}

展翅翱翔之时 (はばたきのとき)相关推荐

  1. 【洛谷P3651】展翅翱翔之时

    难以吐槽出题人的中二病-- 这题有点类似ZJOI2008 骑士,先跑树上的,最后拆环即可. #include<bits/stdc++.h> #define N 100005 typedef ...

  2. 【题解】展翅翱翔之时 (はばたきのとき)

    sol: 考虑对于每个基环树求答案. 对于一棵树,考虑对于每个点只保留通向它的最大的边. 对于基环树,考虑强行断掉环上的一条边,记录环上点通向它的最大边和次大边,如果最大边都是环上边就必须选择一个点强 ...

  3. 做一只展翅翱翔的雄鹰

    给青春一个梦想,用梦想点亮青春.--题记 湛蓝的天空,属于展翅翱翔的雄鹰. 青春是多梦的年龄. 当日历一张张地撕去,大学生活款款走向我们.告别了中学时期的放纵与自由,大学将我们领进知识的殿堂.在过去的 ...

  4. 2021mac新卡牌游戏:展翅翱翔wingspan

    <展翅翱翔WINGSPAN>是一款策略卡牌游戏.玩家将扮演鸟类爱好者.研究人员.鸟类观察者.鸟类学家和收藏家,致力于发现和吸引最好的鸟类到你的野生动物保护网中.每只鸟都会在你的栖息地中展开 ...

  5. 当拓普遇上SAP,展翅翱翔的雄鹰飞向了更高的天空

    伴随着汽车工业的发展,汽配逐渐成为了生产链的核心环节. 在汽车行业高速发展与国家产业政策的大力推动下,汽配行业的规模已迅速扩大. 但是作为汽配行业的主要特点,层层分销渠道这种模式已经开始对企业的运营产 ...

  6. 华尔街风雨飘摇 甲骨文却展翅翱翔

    美国银行业的骚乱及近期美元的升值,都使得投资者对高科技公司可能遭受的潜在影响绷紧了神经.当地时间9月18日,甲骨文发布第一财季财报,业绩达到分析师预期,受华尔街金融风暴的影响微乎其微. 甲骨文第一财季 ...

  7. P3651-展翅翱翔之时【贪心,环套树】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P3651 题目大意 有n个点,有n条有向边,改变每一个点的出边需要价值 ...

  8. 洛谷3月月赛 R1 Step! ZERO to ONE

    https://www.luogu.org/contest/show?tid=1614 TB P3654 First Step (ファーストステップ) https://www.luogu.org/pr ...

  9. 致年轻时如此拼搏的你我

    离别总是伤人意 这一篇文章写在这个时候是有其特殊意义和价值,起码对我来说是这样的.这个时候正是一年一度的毕业季,而我最敬重的师兄即将要离校实习,很幸运的是师兄收到了很不错的 offer,在这里祝他能实 ...

最新文章

  1. LeetCode简单题之二进制表示中质数个计算置位
  2. linux 挂载 nfs 权限,linux – 如何允许写入已挂载的NFS分区
  3. qq android2.0,取代QQ?腾讯TIM安卓2.0发布:10GB云盘免费用
  4. jboss\server\default\.\tmp 拒绝访问 axis2
  5. 国家开放大学2021春1127实用卫生统计学题目
  6. python布尔测试对象_python布尔类型和逻辑运算
  7. javascript该怎么学呢?值得收藏的学习Js之路
  8. 广州市南沙区人民检察院容灾备份平台采购项目
  9. HTML快速上手教程
  10. 写作是最好的学习方法
  11. static{}语句块详解
  12. Linux防蓝光(Redshift)
  13. 直播技术——流媒体协议
  14. 源码分享:打造「螃蟹火星车」,遥控、拍照、测距,还能做人脸检测;
  15. U盘文件变成一个快捷方式或者变成一个文件夹的解决办法
  16. Ubiquitous Religions
  17. CCF 俄罗斯方块(满分代码 + 解题思路 + 技巧总结)201604 - 2
  18. 这些开源项目,值得收藏深入研究
  19. diagram使用(BLOCK DIAGRAM)
  20. 数据库系统中的三级模式、两级映像以及数据独立性(附绪论思维导图)

热门文章

  1. 莫名奇妙的异常010:Unexpected server response (0) while retrieving PDF
  2. WhatsApp中的小标记是什么意思?
  3. openwrt 软件安装依赖冲突
  4. AR Kit Core ML 将救百万iOS开发者于水深火热中
  5. C# 第1次实验报告:熟悉Visual Studio环境
  6. 计算机网络基础之数据链路层的功能与服务
  7. Java-opts变量没生效,使用JAVA_OPTS env变量运行java无效
  8. 漫画:设计模式六大原则(上)
  9. 矩阵乘法求解多项式递推问题
  10. 你应该补钙吗?看这篇就懂了