题目:

题意:

  有一颗树,你可以断开点(第一个随便断,以后只能是和已经断开的点相临的点),每个点有权值,断开之后,经一条边和两条边可以到达的节点权值加一,问到最后出现过的最大的权值。

分析:

  为啥断开之后就剩下的点就不算相邻了呢。。。(原题说的是掉线,可是掉线之后线依然在啊。。。),其实题意好像是掉线之后就断开了。

  拿这不就简单了,不管从谁开始断,都会分成几个子树,然后子树又只能从根开始断,这样就有,选作根的点权值为原权值,剩下的和它相邻的权值+1,剩下的权值+2。

  然后就随便处理一下就好了,为了方便理解,列出情况:

  1.只有一个ma(ma表示最大的点的权值){

    所有ma-1都与它相邻或没有ma-1

      ans=ma

    剩下的情况

      ans=ma+1

  }

  2.有多个ma{

    所有ma都与其中一个相邻

      ans=ma+1

    剩下的情况

      ans=ma+2

  }

  最后是代码:

  

#include <cstdio>
#include <string>
using namespace std;
const int maxn=*1e5+;
int a[maxn];
struct E{
int next;
int to;
E(){
to=next=;
}
}ed[maxn*];
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-;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
ma=max(ma,a[i]);
}
int j1,j2;
for(int i=;i<=n-;i++){
scanf("%d%d",&j1,&j2);
J(j1,j2);
J(j2,j1);
}
int js1=,js2=;//表示ma和ma-1的个数
for(int i=;i<=n;i++){
if(a[i]==ma)
js1++;
if(a[i]==ma-)
js2++;
}
if(js1==){//分情况处理一下
int js=;
for(int i=;i<=n;i++)
if(a[i]==ma){
for(int j=head[i];j;j=ed[j].next)
if(a[ed[j].to]==ma-)
js++;
break;
}
if(js==js2)
printf("%d",ma);
else
printf("%d",ma+);
}
else{
int js=;
int zjs=;
for(int i=;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=;
}
if(js==js1)
printf("%d",ma+);
else
printf("%d",ma+); }
return ;
}

Bank Hacking题解的更多相关文章

  1. CF796C Bank Hacking 题解

    洛谷链接 题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To ...

  2. Code Forces 796C Bank Hacking(贪心)

    Code Forces 796C Bank Hacking 题目大意 给一棵树,有\(n\)个点,\(n-1\)条边,现在让你决策出一个点作为起点,去掉这个点,然后这个点连接的所有点权值+=1,然后再 ...

  3. C. Bank Hacking 解析(思維)

    Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...

  4. CF796C Bank Hacking 思维

    Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To search f ...

  5. codeforce 796C - Bank Hacking(无根树+思维)

    题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To searc ...

  6. CodeForces - 796C Bank Hacking

    思路:共有n-1条边连接n个点,即形成一棵树.一开始需要选择一个点hack--将这个点视为根结点,与它相邻的点防御值加1,与它相隔一个在线点的点的防御也加1.当根节点被hack,即这个点被删除,又变成 ...

  7. Codeforces Round #408 (Div. 2)C. Bank Hacking(STL)

    题目链接:http://codeforces.com/problemset/problem/796/C 题目大意:有n家银行,第一次可以攻击任意一家银行(能量低于自身),跟被攻击银行相邻或者间接相邻( ...

  8. Codeforces Round #408 (Div. 2) C. Bank Hacking

    http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...

  9. 【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)

    [题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...

随机推荐

  1. 性能测试之 JVM 概念认识

    无论什么语言,在程序运行过程中,都需要对内存进行管理,要知道计算机/服务器的内存不是无限的.例如:C语言中需要对对象的内存负责,需要用delete/free来释放对象:那JAVA中,对象的内存管理是由 ...

  2. Spring IoC 容器的扩展

    前言 本篇文章主要介绍 Spring 中 BeanFactory 的扩展 ApplicationContext,我们平时日常开发中也基本上是使用它,不会去直接使用 BeanFactory. 那么在 S ...

  3. Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)

    勿以恶小而为之,勿以善小而不为--------------------------刘备 劝诸君,多行善事积福报,莫作恶 上一章简单介绍了Struts2的'两个蝴蝶飞,你好' (一),如果没有看过,请观 ...

  4. 内存管理,goto的使用,内存的申请和释放,mmap,ioremap

    1.内存管理 (将物理内存映射到内核空间(3G~4G)并使用)  深入内核: 伙伴系统 1.1基本概念    1)linux内核管理内存是以物理内存页为单位       一个物理内存页通常为4KB   ...

  5. Codeforces Round #648 (Div. 2)

    链接 : https://codeforces.com/contest/1365/problems problem A 统计可用的行和列的最小值, 模2输出即可 /* * Author: RoccoS ...

  6. (九)maven-surefire-plugin常用配置

    原文链接:https://www.cnblogs.com/pixy/p/4718176.html 对maven-surefire-plugin有想了解的,看这篇:https://www.cnblogs ...

  7. rust 九九乘法表

    fn main(){ for i in 1..10 { for j in 1..i+1 { print!("{}*{}={:<2} ",j,i,i*j); } print!( ...

  8. DES 加密解密 文件工具类

    public class DESEncrypt { /** 加密工具 */ private Cipher encryptCipher = null; /** 解密工具 */ private Ciphe ...

  9. python 获取两位的月份(09)和天数(09)

  10. Spring插件安装 - Eclipse 安装 Spring 插件详解(Spring Tool Suite)

    安装完成后重启eclipse即可新建spring工程