这道题原本写了一个很复杂的DFS,然后陷入绝望的调试。

看了一下题解发现自己完全想复杂了。

这里大概就是补充一些题解没有详细解释的代码吧。。。


(小声BB)现在最优解rank4(话说$O2$负优化什么鬼啊)

 read(n);
for(register int i=;i<=n;++i)read(c[i]);
for(register int i=;i<=n;++i){
read(a[i]);
if(a[i]==i){
vis[i]=;
ans+=c[i];
}
}
for(register int i=;i<=n;++i){
if(vis[i])continue;
for(register int j=i;;j=a[j]){
if(vis[j]){
if(vis[j]==i+)ans+=find(j);
break;
}
vis[j]=i+;
}
}
write(ans);

程序主题内容如下。

前面是读入数据没有什么好讲的。

在读入a的时候先判断一下有没有自环,有的话就不用看了直接加上。

然后我们对每一个点都瞎搞搞(其实就是一个DFS)。

我们从这个点开始一直向下跳。如果遇到已经走过的点就说明有环出现了,这个时候根据vis的值决定是不是这一轮跳出的环(由于可能是之前的)。

然后我们在这个环上跑一下求最小值。(为什么只在环上不在链上前面题解讲得很清楚了)

如果不是已经走过的点,那我们还在链上,继续往下跳吧。

find函数如下:

 inline int find(int s){
int res=c[s];
for(register int i=a[s];;i=a[i]){
if(i==s)return res;
else res=min(res,c[i]);
}
}

最新文章

  1. gzip: stdout: No space left on device问题的解决
  2. Jquery最全过滤器总结
  3. Hive简单优化;workflow调试
  4. 【USACO】pprime
  5. Strange Way to Express Integers (一般模线性方程组)
  6. angular学习(二):Controller定义总结
  7. ant利用先进,ant订单具体解释,ant包,ant包装删除编译jar文件
  8. jQuery获取当前对象标签名称
  9. ctrl+c 和 ctrl+z 的区别
  10. Python中urllib.urlencode中文字符的一个问题
  11. 我的pwn笔记
  12. 02.Numpy
  13. testng + reportng 测试结果邮件发送
  14. B - Cube HDU - 1220 (数学计数)
  15. BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)
  16. windows下前端开发工具遇到的问题总结(yeoman bower grunt)
  17. ORM的详解
  18. 学习sqlserve的一些笔记
  19. background-image:url(data:image/gif;base64,XXXX) base64方式将本地图片添加到文档中
  20. MIME类型是什么?包含哪些类型?

热门文章

  1. 自定义pulltoRefresh的刷新和加载动画
  2. http状态码304
  3. Matlab从入门到精通 Chapter5 数据可视化--
  4. 织梦(dedecms)循环调用多级子栏目如二级栏目下三级栏目
  5. pandas 5 导入导出 读取保存 I/O API
  6. WPF 内部的5个窗口之 MediaContextNotificationWindow
  7. Linux环境安装phpredis扩展
  8. LeetCode【8】. String to Integer (atoi) --java实现
  9. Linux在中国的没落
  10. 上传canvas图片到服务器