题目: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 —— 二分的更多相关文章

  1. 解题:POI 2014 Ant colony

    题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> # ...

  2. bzoj 3872 [Poi2014]Ant colony——二分答案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 可以倒推出每个叶子节点可以接受的值域.然后每个叶子二分有多少个区间符合即可. 注意一开 ...

  3. $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...

  4. bzoj 3872: [Poi2014]Ant colony -- 树形dp+二分

    3872: [Poi2014]Ant colony Time Limit: 30 Sec  Memory Limit: 128 MB Description   There is an entranc ...

  5. 【BZOJ3872】Ant colony(二分,动态规划)

    [BZOJ3872]Ant colony(二分,动态规划) 题面 又是权限题... Description There is an entrance to the ant hill in every ...

  6. 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分

    [BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...

  7. CodeForces 474F Ant colony ST+二分

    Ant colony 题解: 因为一个数是合法数,那么询问区间内的其他数都要是这个数的倍数,也就是这个区间内的gcd刚好是这个数. 对于这个区间的gcd来说,不能通过前后缀来算. 所以通过ST表来询问 ...

  8. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  9. Codeforces 474 F. Ant colony

    线段树求某一段的GCD..... F. Ant colony time limit per test 1 second memory limit per test 256 megabytes inpu ...

随机推荐

  1. Android应用的权限配置和权限列表

    权限配置写在Mainifest.xml文件中: <?xml version="1.0" encoding="utf-8"?> <manifes ...

  2. [CodePlus2017]汀博尔

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 158  Solved: 61[Submit][Status][Discuss] Description ...

  3. msp430入门编程37

    msp430中C语言的可移植--屏蔽实现细节

  4. iOS textView在调用textViewDidChange方法,中文输入的问题

    有时候,需要在textViewDidChange处理时,在中文输入的情况下,例如输入“中”,对应的拼音“zhong”, 在textViewDidChange的方法里会把拼音也算进去:导致输入中文时也输 ...

  5. python学习之-- assert断言

    assert 断言作用:断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常.举例如下:a ...

  6. python学习之 - XML

    xml模块定义:实现不同语言或程序之间进行数据交换的协议.格式如下:通过<>节点来区别数据结构如:<load-on-startup(这个是标签) test="value&q ...

  7. MongoDB学习day08--Mongoose索引、Mongoose内置方法、扩展Mongoose Model的静态方法和实例方法

    一.Mongoose索引 索引是对数据库表中一列或多列的值进行排序的一种结构, 可以让我们查询数据库变得更快. MongoDB 的索引几乎与传统的关系型数据库一模一样, 这其中也包括一些基本的查询优化 ...

  8. Maven安装和手动安装jar到仓库

    1. 安装Maven 1.下载mvn到本地,解压. 2.新建系统变量MAVEN_HOME,值指向安装目录如D:\apache-maven-3.3.9 3.path变量中增加:%MAVEN_HOME%\ ...

  9. arcengine 文件夹连接

    Provides access to members that manages a GX catalog. Product Availability Available with ArcGIS Des ...

  10. java的反射机制和javassist、asm

    1.java的反射机制,可以帮助我们在运行的时候获取我们引用的java类相关的信息,包括类的名字.所包含的方法名字.方法参数等等 2.javassit这个jar包,大概看了下,更厉害,它可以直接操作字 ...