当前位置: 首页 > news >正文

【题解】Luogu P8269 [USACO22OPEN] Visits S

思路

容易发现题目给出了一张 \(n\) 个点 \(n\) 条边的有向图,联想到基环树。又因为每个点出度均为一所以是内向基环树。

考虑到题目中的“拜访”类似于拓扑排序,冲突仅存在于环上,所以总边权和去掉环上最小的一条边即为答案。但题目不保证联通,所以其实是基环森林,每棵树上都有一个环。全部去掉即可。

代码

#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int N=1e5+10;
int n,ans;
int a[N],w[N];
int ind[N],outd[N];
int vis[N];
int mn(int u){int minw=w[u],t=a[u];while(t!=u){minw=min(minw,w[t]);t=a[t];}return minw;
}
void change(int u){int t=u;while(vis[t]==1){vis[t]=2;//与判环的标记区分,防止汇入上一枝重新入环t=a[t];}return ;
}
signed main(){scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld%lld",&a[i],&w[i]);ans+=w[i];} for(int i=1;i<=n;i++){if(!vis[i]){int t=i;while(!vis[t]){vis[t]=1;t=a[t];}//遍历这棵基环树直到出现环if(vis[t]==1) ans-=mn(t);//再搜一遍环求出最小边权change(i);//将走过的路全部标记,在从外向基环树的其他环外点搜索时不会再进入环内} }printf("%lld\n",ans);return 0;
} 

时间复杂度 \(O(n)\)

http://www.rkmt.cn/news/89236.html

相关文章:

  • Ubuntu环境中LLaMA Factory 的部署与配置—构建大语言模型微调平台 - 实践
  • WSL安装方法
  • 【题解】P11453 [USACO24DEC] Deforestation S
  • 【dl】【WSL2】如何获得“Winux”?Windows 上的 Linux 子系统 —— 比虚拟机更好的选择
  • CSS3动画:2D/3D转换全解析
  • P2014 [CTSC1997] 选课
  • 彻底讲清 MySQL InnoDB 锁机制:从 Record 到 Next-Key 的全景理解
  • MCU的启动流程你了解么?
  • I2C通信最全面的讲解:从协议到硬件设计
  • 【题解】Luogu P10752 [COI 2024] Sirologija
  • Python字符串:别只用来打印!这5个高级用法让代码效率翻倍
  • 【题解】Atcoder ABC432 C
  • 赶due党救急!论文降重2小时搞定,不熬夜
  • 计算机论文模板推荐:8大平台+AI修改工具
  • 期待回家,顺便写点年度总结
  • E No address added out of total 1 resolved地址绑定失败: No address added out of total 1 resolved errors:
  • JavaScript 异常原因(Error Cause):实现分布式系统错误链追踪的序列化与反序列化
  • JavaScript 记录(Records)与 元组(Tuples):实现堆内存中不可变复合数据结构的内存布局
  • 线程并发编程,同步与互斥机制
  • Python列表与元组:搞懂这3个核心差异,再也不纠结用哪个
  • MQ消息队列相关知识与对比
  • 完整教程:PPT导出为图片的格式选择:JPG与PNG的区别
  • 代码随想录算法训练营第三十二天 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、卡码网57. 爬楼梯
  • 基于深度学习的文物图像修复系统
  • JavaScript 引擎中的分支预测器(Branch Predictor)友好性:如何写出减少 CPU 误判的代码
  • Day 37 - 早停策略与模型权重的保存
  • 【SOVD】软件定义汽车时代的诊断新范式
  • 最全词典整合收录:打造专业英语学习利器
  • C盘哪些文件可以删除?
  • 18、深入了解 Linux 文件系统:导航与分区指南