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

C. Bank Hacking 解析(思維)的更多相关文章

  1. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  2. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

  3. C2. Power Transmission (Hard Edition) 解析(思維、幾何)

    Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...

  4. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

  5. B. Two Arrays 解析(思維)

    Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...

  6. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

  7. D. Road to Post Office 解析(思維)

    Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...

  8. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  9. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

随机推荐

  1. Java源码赏析(二)Java常见接口

    一.Comparable接口 package java.lang; import java.util.*; public interface Comparable<T> { /** * i ...

  2. dbdeployer MySQL沙盒部署详解

    一.工具介绍 前几日用mysql-sandbox来搭建MySQL8.0新版本时发现用不了,提示需要使用dbdeployer才行,瞬间觉得mysql-sandbox不香了,只好咬咬牙来熟悉dbdeplo ...

  3. 登陆页跳出iframe

    1 if(top.location.href != location.href){ 2 top.location.href = location.href; 3 }

  4. Java知识系统回顾整理01基础06数组04增强型for循环

    增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...

  5. 简说Modbus-RTU与Modbus-ASCII

    Modbus在串行总线通信中的协议有RTU和ASCII两种.RTU是Remote Terminal Unit的缩写,意思是远程终端单元.ASCII是American Standard Code for ...

  6. ubuntu19.10如何设置固定ip

    $ip a 看见系统中有两块网卡 lo: ...... ens33: ...... #cd /etc/netplan$ls目录下面有文件01-network-manager-all.yaml $sud ...

  7. Linux下clock子系统

    常用API: 1.struct clk *clk_get(struct device *dev, const char *id):从一个时钟list链表中以dev或者字符id名称查找一个时钟clk结构 ...

  8. 4-20mA模拟量采集

    4-20mA模拟量采集 4-20mA模拟量采集可选卓岚ZLAN6802(485)/ZLAN6842(以太网)/ZLAN6844(无线wifi)他们不仅可以可采集4~20mA还可以采集 /0~5V/0~ ...

  9. UDP协议网络Socket编程(java实现C/S通信案例)

    我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...

  10. 好用的C语言编程软件!工具都没有,怎么用技术改变世界呢!

    好用的C语言编程软件 1.VS(Visual Studio)   VS(Visual Studio) VS是目前最流行的windows平台应用程序的集成开发环境,由于大部分同学使用的都是Windows ...