bzoj 3872 [ Poi 2014 ] Ant colony —— 二分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872
从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符合条件即可;
注意中途判断,如果已经超过范围就返回或者处理一下,据说会爆 long long 之类的;
而且食蚁兽所在的边的两个端点的初始值不一定是 k 和 k+1 !也要看度数!
注意统计答案的 num 也是 long long 。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mid ((ll+rr)>>1)
using namespace std;
typedef long long ll;
int const xn=1e6+;
int n,g,k,s,t,hd[xn],ct,to[xn<<],nxt[xn<<],deg[xn];
ll m[xn],l[xn],r[xn],num;//
bool vis[xn];
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
void add(int x,int y){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct;}
int findl(ll x)//第一个大于等于x的
{
int ll=,rr=g,ret=-;
while(ll<=rr)
{
if(m[mid]>=x)ret=mid,rr=mid-;
else ll=mid+;
}
return ret;
}
int findr(ll x)
{
int ll=,rr=g,ret=-;
while(ll<=rr)
{
if(m[mid]<x)ret=mid,ll=mid+;//<
else rr=mid-;
}
return ret;
}
void cal(int x)
{
if(l[x]>m[g]||r[x]<=m[])return;
num+=findr(r[x])-findl(l[x])+;
}
void dfs(int x)
{
vis[x]=;
if(l[x]>m[g])return;//
if(r[x]>m[g])r[x]=m[g]+;//
for(int i=hd[x],u;i;i=nxt[i])
{
if(vis[u=to[i]]||(x==s&&u==t)||(x==t&&u==s))continue;
if(deg[u]>)
{
l[u]=(deg[u]-)*l[x]; r[u]=(deg[u]-)*r[x];
dfs(u);
}
else cal(x);
}
}
int main()
{
n=rd(); g=rd(); k=rd();
for(int i=;i<=g;i++)m[i]=rd();
sort(m+,m+g+);
for(int i=,x,y;i<n;i++)
{
x=rd(); y=rd();
if(i==)s=x,t=y;
add(x,y); add(y,x); deg[x]++; deg[y]++;
}
// l[s]=l[t]=k; r[s]=r[t]=k+1;
if(deg[s]==)l[s]=k,r[s]=k+;
else l[s]=(deg[s]-)*k,r[s]=(deg[s]-)*(k+);
if(deg[s]==)cal(s);//!
if(deg[t]==)l[t]=k,r[t]=k+;
else l[t]=(deg[t]-)*k,r[t]=(deg[t]-)*(k+);
if(deg[t]==)cal(t);//!
dfs(s); dfs(t);
printf("%lld\n",num*k);
return ;
}
bzoj 3872 [ Poi 2014 ] Ant colony —— 二分的更多相关文章
- 解题:POI 2014 Ant colony
题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> # ...
- bzoj 3872 [Poi2014]Ant colony——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 可以倒推出每个叶子节点可以接受的值域.然后每个叶子二分有多少个区间符合即可. 注意一开 ...
- $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$
正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...
- bzoj 3872: [Poi2014]Ant colony -- 树形dp+二分
3872: [Poi2014]Ant colony Time Limit: 30 Sec Memory Limit: 128 MB Description There is an entranc ...
- 【BZOJ3872】Ant colony(二分,动态规划)
[BZOJ3872]Ant colony(二分,动态规划) 题面 又是权限题... Description There is an entrance to the ant hill in every ...
- 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分
[BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...
- CodeForces 474F Ant colony ST+二分
Ant colony 题解: 因为一个数是合法数,那么询问区间内的其他数都要是这个数的倍数,也就是这个区间内的gcd刚好是这个数. 对于这个区间的gcd来说,不能通过前后缀来算. 所以通过ST表来询问 ...
- [BZOJ3872][Poi2014]Ant colony
[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...
- Codeforces 474 F. Ant colony
线段树求某一段的GCD..... F. Ant colony time limit per test 1 second memory limit per test 256 megabytes inpu ...
随机推荐
- Go常量与枚举类型
package main import ( "math" "fmt" ) //常量与枚举 //const数值可作为各种类型使用 func consts() { ...
- VIM键盘图
- 关于datetime,date,timestamp,year,time时间类型小结
关于datetime,date,timestamp,year,time时间类型 datetime占用8个字节 日期范围:”1000-01-01 00:00:00” 到”9999-12-31 23:59 ...
- JavaBean映射工具dozer学习
阅读更多 转载自http://lishaorui.iteye.com/blog/1151513 1.简介 dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但 ...
- 前后端分离项目shiro的未登录和权限不足
在前后端分离的项目中.前端代码和后端代码几乎不在同一个目录下,甚至不是在一台服务器上:我这个项目部署在linux.同一台服务器,不同目录下:所有的页面跳转由前台路由,后台只是提供返回的数据: 干货↓ ...
- freeswitch电话代接
Misc. Dialplan Tools intercept Description Allows one channel to bridge itself to the a or b leg of ...
- vs npm设置淘宝npm
VS2017自带的npm会去国外的镜像下载文件, 奇慢无比, 还是马云家淘宝的镜像适合国内用户. 淘宝npm镜像地址: https://registry.npm.taobao.org VS中使用淘宝 ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- WebLogic中"域"的概念
WebLogic 版权声明:本文为博主原创文章,未经博主允许不得转载. WebLogic Server中的域是逻辑上相关的一组 WebLogic Server 资源,可以作为一个单元进行管理.一个域中 ...
- Oracle冷备和热备脚本
Oracle冷备和热备脚本 冷备脚本: set feedback off set heading off set verify off set trimspool off set echo off ...