Bank Hacking CodeForces - 796C
题意:
一条笨狗要去黑银行,银行有n个,它们之间用n-1条边连接。可以选择任意一个银行开始黑,但是后面每一次黑的银行都要求与已经黑过的银行直接相连。每个银行初始有一个防御值,每一个银行被黑后,与其直接相连的未被黑的银行的防御值会+1,与“与其直接相连的未被黑的银行”相连的未被黑的银行的防御值也会+1,。笨狗要黑完所有银行,且其电脑的强度要求大于等于所有银行被黑那一刻的防御值。现在要求电脑的最小强度。
分析:
记点x在被hack时比原来高的强度为s[x], 稍微尝试一下就会发现,s[第一次选的]=0,s[第一次选的的neighbor]=1,s[其他所有]=2.
选的 | s有更新的 |
选4 | s[4]=0 s[3]=s[5]=s[2]=s[6]=1 |
选5 | s[6]=2 s[7]=1 |
选6 | s[7]=2 |
选3 | s[2]=2 s[1]=1 |
选7 | 无 |
选2 | s[1]=2 |
选1 | 无 |
所以,暴力吧
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
struct Edge
{
LL to,next;
}edge[];
LL num_edge,first[],d[],ans=0x3f3f3f3f,n;
struct Node
{
Node *lc,*rc;
LL l,r;
LL maxn;
}ssss[];//线段树,然而根本用不着
LL num_node;
Node* getnode()
{
return &ssss[num_node++];
}
Node* build(LL l,LL r)
{
Node *_tmp=getnode();
_tmp->l=l;
_tmp->r=r;
if(l==r)
{
_tmp->maxn=d[l];
//_tmp->lc=NULL;
//_tmp->rc=NULL;
return _tmp;
}
LL m=(l+r)>>;
_tmp->lc=build(l,m);
_tmp->rc=build(m+,r);
_tmp->maxn=max(_tmp->lc->maxn,_tmp->rc->maxn);
return _tmp;
}
LL query(LL L,LL R,Node *p)
{
LL l=p->l;
LL r=p->r;
if(L<=l&&r<=R)
return p->maxn;
LL ans=-0x3f,m=(l+r)>>;
if(L<=m) ans=max(ans,query(L,R,p->lc));
if(R>m) ans=max(ans,query(L,R,p->rc));
return ans;
}
void update(LL L,Node *p,LL x)
{
LL l=p->l;
LL r=p->r;
if(l==r)
{
//p->maxn=max(p->maxn,x);
p->maxn+=x;
return;
}
LL m=(l+r)>>;
if(L<=m) update(L,p->lc,x);
else update(L,p->rc,x);
p->maxn=max(p->lc->maxn,p->rc->maxn);
}
int main()
{
LL i,a,b,k;
scanf("%lld",&n);
for(i=;i<=n;i++)
scanf("%lld",&d[i]);
for(i=;i<n;i++)
{
scanf("%lld%lld",&a,&b);
edge[++num_edge].to=b;
edge[num_edge].next=first[a];
first[a]=num_edge;
edge[++num_edge].to=a;
edge[num_edge].next=first[b];
first[b]=num_edge;
}
Node *x=build(,n);
for(i=;i<=n;i++)
{
update(i,x,-);
k=first[i];
while(k!=)
{
update(edge[k].to,x,-);
k=edge[k].next;
}
ans=min(ans,query(,n,x)+);
update(i,x,);
k=first[i];
while(k!=)
{
update(edge[k].to,x,);
k=edge[k].next;
}
}
printf("%lld",ans);
//del(x);
return ;
}
再贴一张
Bank Hacking CodeForces - 796C的更多相关文章
- 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 版權所有 觀 ...
- CodeForces - 796C Bank Hacking
思路:共有n-1条边连接n个点,即形成一棵树.一开始需要选择一个点hack--将这个点视为根结点,与它相邻的点防御值加1,与它相隔一个在线点的点的防御也加1.当根节点被hack,即这个点被删除,又变成 ...
- 【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个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...
- Codeforces Round #408 (Div. 2) C. Bank Hacking
http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...
- codeforce 796C - Bank Hacking(无根树+思维)
题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To searc ...
- 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的难度为 ...
随机推荐
- C++ 模板应用浅析
把曾经写的C++模板的应用心得发表出来. 回忆起当时在学习C++模板时的无助和恐惧,如今还心有余悸.我分享出来我的心得,仅仅希望别人少走弯路,事实上它就这么几种使用方法,不须要害怕. 我总结了模板的四 ...
- 嵌入式开发之davinci---8148/8127/8168 中dsp c674的浮点和定点兼容
c674: 是c67(浮点)+c64(定点) 兼容的 http://processors.wiki.ti.com/index.php/-mv_option_to_use_with_the_C674x ...
- storage engine option for directoryPerDB
Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...
- javascript数据基本类型和引用类型
JavaScript基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值. ...
- Dom解析XMl文档
XMl文档 <?xml version = "1.0" encoding = "UTF-8"?> <books> <book bo ...
- Hadoop MapReduce输入输出类型
一.输入格式 1.输入分片split 一个分片对应一个map任务: 一个分片包含一个表(整个文件)上的若干行,而一条记录(单行)对应一行: 分片包含一个以字节为单位的长度 和 一组存储位置,分片不包含 ...
- KbmMW资源汇总(特别是xalion的文章)
KbmMW框架是收费的,不在此提供下载,如需购买,请自行联系作者Kim Madsen. 网址资源: 官网主页:http://www.components4programmers.com/product ...
- 做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)
代码: #include <stdio.h> #include <string.h> #include <string> #include <vector&g ...
- POJ3074 Sudoku —— Dancing Links 精确覆盖
题目链接:http://poj.org/problem?id=3074 Sudoku Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- 如何反编译silverlight
@years(945060991) 15:10:28问一下 如何反编译silverlight观,一世沧桑如画♥(752816388) 15:10:46解压就行@years(945060991) ...