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的难度为 ...
随机推荐
- js弹出QQ对话框在线交谈
<div style="position:absolute; top:110px; right:220px; z-index:2;"> <a target=&qu ...
- 两个月刷完Leetcode前400题经验总结
更新:气死了,挂个傻逼: 每次做个分享.组织个活动,就会有一些傻逼冒泡生怕别人不知道他是傻逼,气死我了!自己好好看看非法集资的概念,我办这个活动,一分钱都没收,入群99元是督促大家完成刷题任务,最后完 ...
- sql建表,建索引注意事项
建表注意 .建议字段定义为NOT NULL 搜索引擎 MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基 ...
- monitor and move the log content to our big data system
Apache Flume HDFS Sink Tutorial | HowToProgram https://howtoprogram.xyz/2016/08/01/apache-flume-hdfs ...
- nlp_tool
http://www.afenxi.com/post/9700 11款开放中文分词引擎大比拼 附录评测数据地址http://bosonnlp.com/dev/resource 各家分词系统链接地址Bo ...
- MIPS 指令集将在近期开源,RISC-V 阵营慌吗?
消息称,MIPS 指令集即将开源. eetimes 17 日报导,Wave Computing 公司表示,在明年第一季度发布最新 MIPS 指令集体系和 MIPS 最新内核 R6 的时候将开源 MIP ...
- 微软下一代站点开发框架:ASP.NET MVC 6 新特性揭秘
国内第一个<微软下一代站点开发框架:ASP.NET MVC 6 新特性揭秘 >课程 微软特邀讲师 徐雷!周六晚8点YY预定:id=28447" href="htt ...
- android checkbox radiogroup optionmenu dialog
\n换行 UI visible:View.INVISIBLE 不可见,占用空间,View.GONE 不可见,不占用空间 菜单 res右击新建menu xml 自动新建menu文件夹 context ...
- gitbash使用
gitbash是什么 git bash是Windows下的命令行工具. 基于msys GNU环境,有git分布式版本控制工具. 主要用于git版本控制,上传下载项目代码. GNU环境,就是说如果你喜欢 ...
- 基于C#实现Windows服务状态启动和停止服务的方法
网址:http://www.jb51.net/article/89230.htm