codeforces1027D
2024-04-07 17:19:37
题目链接
http://codeforces.com/problemset/problem/1027/D
这道题目的入手点就是图的特点。图的输入形式是 第 i 个点的后继是a[ i ],且只有一个,a[ i ]的范围是从1到n。所以图中一定存在环,并且环和环之间不可能公用一条边(如果共用一条边,那么某个点会有两个后继)。
因此这道题目就是用dfs找环,然后通过回溯求出环上定点的权值最小值。
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<string> #include<vector> #define DEBUG(x) cout<<#x<<" = "<<x<<endl using namespace std; const int MAXN=2e5+10; int N; vector<int>G[MAXN]; int cost[MAXN]; int vis[MAXN]; int cv=-1; int mc; int csum=0; void dfs(int u) {if(vis[u]==1){cv=u;mc=cost[u];return;}vis[u]=1;for(int i=0;i<G[u].size() ;i++ ){int v=G[u][i];dfs(v);}if(cv!=-1){if(cv==u){csum+=mc;cv=-1;}else mc=min(mc,cost[u]);} } int main() { // freopen("in.txt","r",stdin);scanf("%d",&N);for(int i=1;i<=N ;i++ ){scanf("%d",&cost[i]);}for(int i=1;i<=N ;i++ ){int e;scanf("%d",&e);G[i].push_back(e);}for(int u=1;u<=N ;u++ ){if(vis[u]==0){dfs(u);cv=-1;}}printf("%d\n",csum); }
转载于:https://www.cnblogs.com/MalcolmMeng/p/9528045.html
codeforces1027D相关推荐
最新文章
- LeetCode简单题之连续字符
- GHOST还原教程详细
- Essential Studio for mobile MVC中2种添加移动图表到MVC3 ASPX应用程序中的方法
- TiDB 源码阅读系列文章(六)Select 语句概览
- 张亚勤:未来10年AI+生物制药大有可为,我们正开展破壁计划 | MEET2022
- 重载,重写及数组练习
- 我想用keil5生成BIN文件,可是安装目录下找不到fromelf.exe
- ASP.NET Core Identity自定义数据库结构和完全使用Dapper而非EntityFramework Core
- 软件工程模块开发卷宗_软件智能化再进一步,未来人人都能开发软件?
- h.264 视频解码的一点小经验(ffmpeg)
- 如何在 ASP.NET Core 中写出更干净的 Controller
- Jade之Extends
- 由c语言转向c++,我们需要做什么?
- mysql 查询分析器_MYSQL查询分析器工具
- windows 屏幕保护色设置
- bootstrap datepicker 在bootstrap modal中不显示问题
- element-ui组件的下载与安装
- 宏观经济学-大题资源整理
- 【博学谷学习记录】超强总结,用心分享 | shell基础
- 关于That command depends on command in Target ... script phase Copy Pods Resources报错解决方案