Codeforce 796 C. Bank Hacking 解析(思維)

今天我們來看看CF796C

題目連結

題目

略,請直接看原題。

前言

想法

首先稍微在腦中模擬一下大概整個流程是怎麼進行的,會發現以下幾件事:

  1. 選取點\(v\)開始整個流程,之後是對以\(v\)為根的樹"Hack",並且銀行防禦力增加只會加到子節點
  2. 每個點最多被\(+2\)

那麼我們可以想到以下的結論:

首先維護\(:\)最大的\(a[i]\)(\(mx\)),次大的\(a[i]\)(\(smx\)),最大的\(a[i]\)的點的個數(\(cmx\)),次大的\(a[i]\)的點的個數(\(csmx\))

  1. 如果\(mx\)只有\(1\),那麼我們一定是從這個點開始,否則我們最少需要\(mx+1\)的力量(次大的點最多\(+2\),也就是\(smx+2\),其小於等於\(mx+1\))。而如果這個點包含了所有的次大的點,那麼答案就是\(mx\),否則就是\(\max\{smx+2,mx\}\)。
  2. 如果\(mx\)有多個,那麼我們只需要遍歷所有點,看看有沒有點連接(含本身)了所有\(a[i]\)最大的點(就算點本身就是\(mx\),由於有多個值為\(mx\)的點,我們最小還是需要\(mx+1\)的力量),如果有,那麼答案就是\(mx+1\),否則就是\(mx+2\)。(這個流程等於是遍歷所有的邊,所以複雜度是\(O(2(n-1))\))

程式碼:

const int _n=3e5+10;
int t,n,a[_n],cmx,csmx,mx=-1e9-1,smx=-1e9-1,cnt,uu,v;
VI G[_n];
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;rep(i,1,n+1)cin>>a[i];rep(i,1,n){cin>>uu>>v;G[uu].pb(v),G[v].pb(uu);}
rep(i,1,n+1)mx=max(mx,a[i]);rep(i,1,n+1)if(a[i]!=mx)smx=max(smx,a[i]);
rep(i,1,n+1)if(a[i]==mx)cmx++;rep(i,1,n+1)if(a[i]==smx)csmx++;
if(cmx==1){
rep(i,1,n+1)if(a[i]==mx)for(int u:G[i])if(a[u]==smx)cnt++;
if(cnt==csmx)cout<<mx<<'\n';
else cout<<max(mx,smx+2)<<'\n';
}else{
rep(i,1,n+1){
cnt=0;if(a[i]==mx)cnt++;
for(int u:G[i])if(a[u]==mx)cnt++;
if(cnt==cmx){cout<<mx+1<<'\n';return 0;}
}cout<<mx+2<<'\n';
}
return 0;
}

標頭、模板請點Submission看

Submission

最新文章

  1. webrtc中的带宽自适应算法
  2. JSP标准标签库(JSTL)之核心标签(下)
  3. UCOS2_STM32F1移植详细过程(三)
  4. Android 分析工具 APKAnalyser
  5. mybatis 与 ehcache 整合[转]
  6. 01:Hello, World!
  7. web前端之 CSS引入第三方插件
  8. spring(二) AOP之AspectJ框架的使用
  9. Excel图表-创意雷达图-原创图表
  10. iOS 记录近期遇到的几个bug
  11. 1 Python数据类型--
  12. 一个js小游戏----总结
  13. 复旦大学2018--2019学年第一学期(18级)高等代数I期末考试第七大题解答
  14. nodeJs 使用 express-http-proxy 转发请求
  15. HDFS知识点总结
  16. 宕机不等于关机,阴魂不散的vm
  17. js遍历对象的方法
  18. vuex 的基本使用之Module
  19. xadmin后台导出时gunicorn报错ascii
  20. jquery_ajax 地址三级联动

热门文章

  1. PYG5.4第十六期第一轮基础六题
  2. 文本编辑-vi
  3. oracle中插入一条记录后,重新登录查找不到数据
  4. py004.python的逻辑运算,随机数及判断语句if,elif,else
  5. # mac使用homebrew安装jdk和tomcat
  6. Harmony OS 开发避坑指南——源码下载和编译
  7. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用
  8. Python3基础——序列类型
  9. C++中stack
  10. 洛谷比赛 「EZEC」 Round 4