CF796C Bank Hacking 细节
思路十分简单,答案只有 3 种可能,但是有一些细节需要额外注意一下.
code:
#include <bits/stdc++.h>
#define N 300002
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int val[N],hd[N],to[N<<1],nex[N<<1],d1[N],d2[N],n,edges,maxx,mx,m2,cnt,uu;
void add(int u,int v)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void dfs(int u,int ff)
{
if(val[u]==mx) d1[u]=0, uu=u;
for(int i=hd[u];i;i=nex[i])
{
int v=to[i];
if(v==ff) continue;
dfs(v,u);
if(d1[v]+1>d1[u])
{
d2[u]=d1[u],d1[u]=d1[v]+1;
}
else if(d1[v]+1>d2[u]) d2[u]=d1[v]+1;
}
maxx=max(d1[u]+d2[u], maxx);
}
int main()
{
int i,j;
// setIO("input");
mx=-1000300000;
m2=mx;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&val[i]),mx=max(mx,val[i]);
}
for(i=1;i<=n;++i) if(val[i]<mx) m2=max(m2, val[i]);
for(i=1;i<=n;++i) if(val[i]==m2) ++cnt;
for(i=1;i<n;++i)
{
int u,v;
scanf("%d%d",&u,&v),add(u,v),add(v,u);
}
memset(d1,-0x3f,sizeof(d1));
memset(d2,-0x3f,sizeof(d2));
dfs(1,0);
if(maxx==0)
{
if(m2!=mx-1)
printf("%d\n",mx);
else
{
for(int i=hd[uu];i;i=nex[i])
{
int v=to[i];
if(val[v]==m2) --cnt;
}
if(cnt) printf("%d\n",mx+1);
else printf("%d\n",mx);
}
}
else if(maxx<=2) printf("%d\n",mx+1);
else printf("%d\n",mx+2);
return 0;
}
CF796C Bank Hacking 细节的更多相关文章
- CF796C Bank Hacking 思维
Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To search f ...
- CF796C Bank Hacking 题解
洛谷链接 题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- Code Forces 796C Bank Hacking(贪心)
Code Forces 796C Bank Hacking 题目大意 给一棵树,有\(n\)个点,\(n-1\)条边,现在让你决策出一个点作为起点,去掉这个点,然后这个点连接的所有点权值+=1,然后再 ...
- codeforce 796C - Bank Hacking(无根树+思维)
题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To searc ...
- CodeForces - 796C Bank Hacking
思路:共有n-1条边连接n个点,即形成一棵树.一开始需要选择一个点hack--将这个点视为根结点,与它相邻的点防御值加1,与它相隔一个在线点的点的防御也加1.当根节点被hack,即这个点被删除,又变成 ...
- Codeforces Round #408 (Div. 2) C. Bank Hacking
http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...
- Codeforces Round #408 (Div. 2)C. Bank Hacking(STL)
题目链接:http://codeforces.com/problemset/problem/796/C 题目大意:有n家银行,第一次可以攻击任意一家银行(能量低于自身),跟被攻击银行相邻或者间接相邻( ...
- Codeforces Round #408 (Div. 2) C.Bank Hacking(二分)
传送门 题意 给出n个银行,银行之间总共有n-1条边,定义i与j有边相连为neighboring,i到j,j到k有边,则定义i到k的关系为semi- neighboring, 每家银行hack的难度为 ...
随机推荐
- 使用Duilib开发Windows软件(2)——控件的基本介绍
XML 先学习xml https://www.w3cschool.cn/xml/xml-xml-tutorialhc4o1t5m.html 控件 上图是我们下载的NIM_Duilib_Framewor ...
- 七、Flex 布局
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新 ...
- XML-RPC-1概述
XML-RPC是一个远程过程调用(远端程序呼叫)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制. 中文名 XML- ...
- Trie-Tree
最近写了一些关于字典树的题目,这里做个简单的整理. 字典树,又叫单词查找树,顾名思义就是查单词的(不仅仅o),和词典一样.不同的是词典是用纸做的,而字典树是用树形结构构建的. 她用来快速检索你要的内容 ...
- javascript--BOM(browser object model)五大对象
浏览器对象模型: 作用:访问.控制.修改浏览器,与浏览器进行交互(打开新的窗口.回退历史记录.获取url) BOM与的DOM区别:JS通过BOM与浏览器进行交互.BOM的window对象包含了docu ...
- HTML中关于 浮动 的简单说明
1.首先,标签之所以有存在等级分类,是因为他们处于标准文档流(块级元素,行内元素,行内块元素)当中. 2.如何脱离标准文档流? 浮动 绝对定位 固定定位 这些可以让一个标签脱离标准文档流,而元素一旦脱 ...
- Axure流程图
什么是流程图 一个流程图可用于展示各种各样的处理流程,包括用例流程.商业流程.页面流程等.在Axure中,流程图常用于提供一个高保真的.能通过所设计的页面来完成的任务视图.一张简明的流程图,能促进和其 ...
- IDEA 使用与总结
一.IDEA和常用软件下载1.IDEA激活码网站:http://idea.lanyus.com/常用软件网站 idea : https://www.jetbrains.com/idea/downloa ...
- springboot系列(一) Spring Boot浅谈(转载)
首先申明一下本文是转载自https://blog.csdn.net/fly_zhyu/article/details/76407830: 1. Spring Boot是什么,解决哪些问题 1) Spr ...
- centos6/7启动故障排错
centos6启动流程修复: 实验一:删除initramfs-2.6.32-754.el6.x86_64.img进行恢复 该文件很重要initramfs-2.6.32-754.el6.x86_64.i ...