bzoj 3872 [Poi2014]Ant colony——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872
可以倒推出每个叶子节点可以接受的值域。然后每个叶子二分有多少个区间符合即可。
注意一开始的两个点不是直接是 l[ u ]=r[ u ]=lm !也要看度数的!且把那条边的两个端点分别算子树很方便。
而且过程中似乎会爆 long long ,所以如果 l[ i ] 都大于最大值就不往下算了;r[ i ]也要每次与最大值取min。
然后是和网上一份题解对拍出错却仍A了此题的代码。不想管是哪错了……
(连freopen都忘了去掉也能A!)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e6+;
int n,m,lm,a[N],hd[N],xnt,to[N<<],nxt[N<<];
int rt1,rt2,deg[N];
ll l[N],r[N],ans;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
void add(int x,int y)
{
to[++xnt]=y; nxt[xnt]=hd[x]; hd[x]=xnt;
to[++xnt]=x; nxt[xnt]=hd[y]; hd[y]=xnt;
deg[x]++; deg[y]++;
}
void dfs(int cr,int fa)
{
//printf("l[%d]=%lld r[%d]=%lld\n",cr,l[cr],cr,r[cr]);
for(int i=hd[cr],v;i;i=nxt[i])
if(i>&&(v=to[i])!=fa)
{
if(deg[v]==)
{
l[v]=l[cr]; r[v]=r[cr];
}
else
{
l[v]=l[cr]*(deg[v]-);
r[v]=r[cr]*(deg[v]-)+deg[v]-;
}
r[v]=min(r[v],(ll)a[m]);///
if(l[v]>a[m])continue;///
dfs(v,cr);
}
}
int findr(ll x)//ll
{
int l=,r=m,ret=;
while(l<=r)
{
int mid=l+r>>;
if(a[mid]<=x)ret=mid,l=mid+;
else r=mid-;
}
return ret;
}
int findl(ll x)
{
int l=,r=m,ret=m+;
while(l<=r)
{
int mid=l+r>>;
if(a[mid]>=x)ret=mid,r=mid-;
else l=mid+;
}
return ret;
}
int main()
{
freopen("data.in","r",stdin);
n=rdn(); m=rdn(); lm=rdn();
for(int i=;i<=m;i++) a[i]=rdn();
sort(a+,a+m+); int u,v; u=rdn(); v=rdn();
rt1=u; rt2=v; add(u,v);
// l[u]=r[u]=l[v]=r[v]=lm;
for(int i=;i<n;i++)
{
u=rdn(); v=rdn(); add(u,v);
} u=rt1; v=rt2;
if(deg[u]==) l[u]=r[u]=lm;/////
else l[u]=lm*(deg[u]-),r[u]=lm*(deg[u]-)+deg[u]-;///
r[u]=min(r[u],(ll)a[m]); if(l[u]<=a[m]) dfs(u,); if(deg[v]==) l[v]=r[v]=lm;
else l[v]=lm*(deg[v]-),r[v]=lm*(deg[v]-)+deg[v]-;
r[v]=min(r[v],(ll)a[m]); if(l[v]<=a[m]) dfs(v,); for(int i=;i<=n;i++)
if(deg[i]==&&r[i]&&l[i]<=a[m])
ans+=findr(r[i])-findl(l[i])+;
printf("%lld\n",ans*lm);
return ;
}
bzoj 3872 [Poi2014]Ant colony——二分答案的更多相关文章
- bzoj 3872: [Poi2014]Ant colony -- 树形dp+二分
3872: [Poi2014]Ant colony Time Limit: 30 Sec Memory Limit: 128 MB Description There is an entranc ...
- bzoj 3872: [Poi2014]Ant colony【树形dp+二分】
啊我把分子分母混了WA了好几次-- 就是从食蚁兽在的边段成两棵树,然后dp下去可取的蚂蚁数量区间,也就是每次转移是l[e[i].to]=l[u](d[u]-1),r[e[i].to]=(r[u]+1) ...
- 洛谷P3576 [POI2014]MRO-Ant colony [二分答案,树形DP]
题目传送门 MRO-Ant colony 题目描述 The ants are scavenging an abandoned ant hill in search of food. The ant h ...
- $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$
正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...
- 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分
[BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...
- [BZOJ3872][Poi2014]Ant colony
[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...
- [BZOJ 1816] [Cqoi2010] 扑克牌 【二分答案】
题目链接:BZOJ - 1816 题目分析 答案具有可以二分的性质,所以可以二分答案. 验证一个答案 x 是否可行,就累加一下各种牌相对于 x 还缺少的量,如果总和超过了 x 或 m ,就不可行. 因 ...
- [BZOJ 1816][Cqoi2010]扑克牌(二分答案)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1816 分析: 我先以为是道水题,但是要注意的是每套牌中Joker只能用1张的,所以就出现了可能 ...
- BZOJ 1044: [HAOI2008]木棍分割(二分答案 + dp)
第一问可以二分答案,然后贪心来判断. 第二问dp, dp[i][j] = sigma(dp[k][j - 1]) (1 <= k <i, sum[i] - sum[k] <= ans ...
随机推荐
- android之Context对各种服务的管理
经常,当我们须要用到服务的时候能够通果Context来获取:Context.getSystemService(name):比方:当我们想知道当前电话状态(来电/去电/sim卡状态等)时候,我们能够通过 ...
- rtems 4.11 部分m4文件分析
本来想把configure.ac和各种m4文件分析明白,发现有点困难,不过好在也能理解一些. 基本教程 首先要明白m4,参见这个教程,写得不错,不论怎么样m4替换来替换去的,还真是不那么容易懂,好在我 ...
- android 在githup中的资源整理(转)
1.Github开源Android组件资源整理(一) 个性化控件(View) 2.Github开源Android组件资源整理(二)ActionBar和Menu 3. Github开源Android组件 ...
- Unity3D研究院编辑器之重写Hierarchy的右键菜单
Hierarchy视图中选择一个游戏对象以后通过右键可以打开一个unity默认菜单,一般情况下都可以满足我们,但是我想真对某些特殊的游戏对象而展开特殊的菜单.如下图所示,比如这样: 代码: using ...
- 九度OJ 1028:继续畅通工程 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...
- On Using Very Large Target Vocabulary for Neural Machine Translation Candidate Sampling Sampled Softmax
[softmax分类器的加速器] https://www.tensorflow.org/api_docs/python/tf/nn/sampled_softmax_loss This is a fas ...
- 性能测试--测试流程、APDEX、linux性能知识
测试流程.APDEX.linux性能知识 一.性能测试流程: 整体流程:收集需求-->搭建测试环境-->设计性能测试场景-->开发测试脚本-->执行测试-->收集数据-- ...
- myeclipse安装tomactserver图解
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/shaozucheng/article/details/36673227 选择标题栏中 Window- ...
- MV45AOZZ 销售订单增强点
[转自 http://blog.csdn.net/zhongguomao/article/details/6712580]choose the table VBAP or VBAK ( dependi ...
- VIM中使用tab键自动完成(vim tab键自动补全 )插件supertab
supertab.vmb 这个插件好好用, Tab自动补全 http://www.vim.org/scripts/script.php?script_id=1643 安装步骤: 1.下载 supert ...