Code Forces 796C Bank Hacking(贪心)
Code Forces 796C Bank Hacking
题目大意
给一棵树,有\(n\)个点,\(n-1\)条边,现在让你决策出一个点作为起点,去掉这个点,然后这个点连接的所有点权值+=1,然后再将这些刚刚加过一的点的相邻的点的权值+=1
也就是说,除了与根节点相邻的点+=1,其余点+=2
然后求最大集合的最小点权
solution
一看是要求最大的的最小值,首先想到的就是二分,显然想到这个目前没有什么卵用,二分是用来卡最佳答案的,所以使用二分的前提是要给它一个范围去选择,那么现在的任务就是去找这个答案的集合,并且希望它是一个有序的集合,这样我们才能二分答案。
预处理时分情况讨论,max,max+1,max+2
- 当\(root\)链接的点只有\(1\)个\(max\):则所有\(max-1\)都和\(root\)相邻或者均为\(max\),更新\(ans = max\),其他的情况就是\(ans = max + 1\)
- 当\(root\)连接的点中有多个\(max\),那么当所有\(max\)和其中一个相邻的时候\(ans=max+1\),剩下的情况,\(ans=max+2\)
代码——pl.()
#include <cstdio>
#include <string>
using namespace std;
const int maxn=3*1e5+10;
int a[maxn];
struct E{
int next;
int to;
E(){
to=next=0;
}
}ed[maxn*2];
int head[maxn];
int tot;
void J(int a,int b){
tot++;
ed[tot].to=b;
ed[tot].next=head[a];
head[a]=tot;
}
int main(){
int n;
scanf("%d",&n);
int ma=-1e9-10;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
ma=max(ma,a[i]);
}
int j1,j2;
for(int i=1;i<=n-1;i++){
scanf("%d%d",&j1,&j2);
J(j1,j2);
J(j2,j1);
}
int js1=0,js2=0;//表示ma和ma-1的个数
for(int i=1;i<=n;i++){
if(a[i]==ma)
js1++;
if(a[i]==ma-1)
js2++;
}
if(js1==1){//分情况处理一下
int js=0;
for(int i=1;i<=n;i++)
if(a[i]==ma){
for(int j=head[i];j;j=ed[j].next)
if(a[ed[j].to]==ma-1)
js++;
break;
}
if(js==js2)
printf("%d",ma);
else
printf("%d",ma+1);
}
else{
int js=0;
int zjs=0;
for(int i=1;i<=n;i++){
if(a[i]==ma)
zjs++;
for(int j=head[i];j;j=ed[j].next)
if(a[ed[j].to]==ma)
zjs++;
js=max(js,zjs);
zjs=0;
}
if(js==js1)
printf("%d",ma+1);
else
printf("%d",ma+2);
}
return 0;
}
Code Forces 796C Bank Hacking(贪心)的更多相关文章
- 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,即这个点被删除,又变成 ...
- 【模拟】CF 796C Bank Hacking
题目大意 洛谷链接 给定一棵带点权树,选出一个最佳的根节点,使得根节点的点权不变,它的儿子点权加1,其余点点权加2,并使最大点权最小,输出这个最小的最大点权. 其他见链接(懒). PS:原题面很不好总 ...
- 思维题--code forces round# 551 div.2
思维题--code forces round# 551 div.2 题目 D. Serval and Rooted Tree time limit per test 2 seconds memory ...
- Code Forces 833 A The Meaningless Game(思维,数学)
Code Forces 833 A The Meaningless Game 题目大意 有两个人玩游戏,每轮给出一个自然数k,赢得人乘k^2,输得人乘k,给出最后两个人的分数,问两个人能否达到这个分数 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- Bank Hacking CodeForces - 796C
题目 题意: 一条笨狗要去黑银行,银行有n个,它们之间用n-1条边连接.可以选择任意一个银行开始黑,但是后面每一次黑的银行都要求与已经黑过的银行直接相连.每个银行初始有一个防御值,每一个银行被黑后,与 ...
- 【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)
[题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...
- 【codeforces 796C】Bank Hacking
[题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...
随机推荐
- 数据结构:用实例分析ArrayList与LinkedList的读写性能
目录 背景 ArrayList LinkedList 实例分析 1.增加数据 2.插入数据 3.遍历数据 3.1.LinkedList遍历改进 总结 背景 ArrayList与LinkedList是J ...
- 在树莓派3b or 3a or 4a or 4b上搭建OpenWebRX
OpenWebRx OpenWebRX 项目提供了搭建WebSDR的解决方案,该项目基于 Python 编写,除了完全开源外,官方还提供了完备的技术文档.您只需要一台电脑或是树莓派,一个SDR设备和网 ...
- FTP服务器上传工具,FTP服务器上传工具下载!
IIS7服务器管理工具能够作为FTP的客户端,进行FTP的命令操作,可在客户端,下载,安装FTP软件! 同时,它也可以作为VNC的客户端,进行VNC的命令操作!它能够批量连接Windows和Linux ...
- Redis集群方式
Redis有三种集群方式:主从复制,哨兵模式和集群. 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用 ...
- docker registry 镜像同步
docker registry 镜像同步 Intro 之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker regi ...
- Looooops(求解同余方程、同余方程用法)【拓展欧几里得】
Looooops(点击) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...
- spring Cloud网关之Spring Cloud Gateway
Spring Cloud Gateway是什么?(官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/) Spring C ...
- APP——python——自动化环境搭建01
前提:python以及pycharm安装完成. ---------------------------------------------------------------------------- ...
- rust 函数-生命周期
记录一下自己理解的生命周期. 每个变量都有自己的生命周期. 在c++里生命周期好比作用域, 小的作用域的可以使用大作用域的变量. 如果把这里的每个作用域取个名,那么就相当于rust里的生命周期注解. ...
- jmeter的beanshell
[beanshell] 简单介绍beanshell,小型的java源代码解释器 运行下beanshell [常用命令] print() 输出内容到命令行中 (1)也可以在beanshell中自定义 [ ...