Bank Hacking题解
题目:
题意:
有一颗树,你可以断开点(第一个随便断,以后只能是和已经断开的点相临的点),每个点有权值,断开之后,经一条边和两条边可以到达的节点权值加一,问到最后出现过的最大的权值。
分析:
为啥断开之后就剩下的点就不算相邻了呢。。。(原题说的是掉线,可是掉线之后线依然在啊。。。),其实题意好像是掉线之后就断开了。
拿这不就简单了,不管从谁开始断,都会分成几个子树,然后子树又只能从根开始断,这样就有,选作根的点权值为原权值,剩下的和它相邻的权值+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题解的更多相关文章
- CF796C Bank Hacking 题解
洛谷链接 题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To ...
- Code Forces 796C Bank Hacking(贪心)
Code Forces 796C Bank Hacking 题目大意 给一棵树,有\(n\)个点,\(n-1\)条边,现在让你决策出一个点作为起点,去掉这个点,然后这个点连接的所有点权值+=1,然后再 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- CF796C Bank Hacking 思维
Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To search f ...
- 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(STL)
题目链接:http://codeforces.com/problemset/problem/796/C 题目大意:有n家银行,第一次可以攻击任意一家银行(能量低于自身),跟被攻击银行相邻或者间接相邻( ...
- Codeforces Round #408 (Div. 2) C. Bank Hacking
http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...
- 【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)
[题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...
随机推荐
- vue-cli3.0配置详解
这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下. 新建项目 1 2 3 4 5 6 7 8 # 安装 npm install ...
- Servlet Session MVC模式
一 什么是Session 当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId). ...
- mysql 大表mysqldump迁移方案
场景 一张历史表product_history 500万数据,凌晨的才会将正式表的数据迁移到历史表,此次需求将历史表迁移到一个更便宜的数据库实例进行存储. 条件 1.此表不是实时写,凌晨才会更新 2. ...
- Html/css 水平布局居中
如何设置水平居中显示? 一般的方法是设置宽高,然后以margin去控制,比如:DIV居中的经典方法 本章介绍需要宽度自适应时如何水平居中,以及居中失效的几个点 水平自适应居中 比如设置一个列表水平居中 ...
- [转载]java内存工具VisualVM的简单使用以及与Idea集成
本文来源https://blog.csdn.net/KingBoyWorld/article/details/75579606 一.idea集成 1.打开设置 windows File->Set ...
- 包子凑数(dp 0-1、完全背包)【背包问题】
包子凑数(蓝桥杯) 感谢:@ Statusrank 题目链接(点击) 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多 ...
- Java8新特性之函数式接口
<Java 8 实战>学习笔记系列 定义 函数式接口只定义一个抽象方法,可以有多个默认方法 函数式接口的接口名上,会被@FunctionalInterface标注 作用 函数式接口的方法可 ...
- vulstack红队评估(五)
一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: Win7: heart 123.com #本地管理员用户 sun\Administrator dc123.com #域管用户,改 ...
- 多语言工作者の十日冲刺<9/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第九天(05.08) 作业正文 ...
- 010.OpenShift综合实验及应用
实验一 安装OpenShift 1.1 前置准备 [student@workstation ~]$ lab review-install setup 1.2 配置规划 OpenShift集群有三个节点 ...