$bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$
正解:二分+$dp$
解题报告:
一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$.
考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶子节点就成$QwQ$
$over$
嗷注意一个细节是有可能乘爆,所以每次和$m_max$取个$min$就成$QwQ$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define int long long
#define t(i) edge[i].to
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];i;i=edge[i].nxt) const int N=+;
int n,head[N],ed_cnt,g,K,m[N],frx,fry,in[N],l[N],r[N],inf,as;
struct ed{int to,nxt;}edge[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ri x,ri y){edge[++ed_cnt]=(ed){x,head[y]};head[y]=ed_cnt;++in[x];}
void dfs(ri nw,ri fa)
{
e(i,nw)
if(t(i)^fa)
l[t(i)]=min(1ll*l[nw]*(in[nw]-),inf+),r[t(i)]=min(1ll*(r[nw]+)*(in[nw]-)-,inf),dfs(t(i),nw);
}
il int fd1(ri x){return lower_bound(m+,m++g,x)-m-;}
il int fd2(ri x){ri tmp=upper_bound(m+,m++g,x)-m;return m[tmp]==x?tmp:tmp-;} signed main()
{
freopen("3872.in","r",stdin);freopen("3872.out","w",stdout);
n=read();g=read();K=read();rp(i,,g)m[i]=read();sort(m+,m++g);inf=m[g];
rp(i,,n-){ri x=read(),y=read();ad(x,y);ad(y,x);if(i==)frx=x,fry=y;}
l[frx]=r[frx]=l[fry]=r[fry]=K;dfs(frx,fry);dfs(fry,frx);
rp(i,,n)if(in[i]==)as+=fd2(r[i])-fd1(l[i]);;printf("%lld\n",1ll*as*K);
return ;
}
随机推荐
- @loj - 2480@ 「CEOI2017」One-Way Streets
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一张 n 个点 m 条边的无向图,现在想要把这张图定向. 有 ...
- @codeforces - 1086F@ Forest Fires
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一个无穷大的方格图,每个方格内都种了棵树. 一开始点燃了 n 棵 ...
- 常用开源网站:sourceforge,github,foss,launchpad,PortableApps,datamation,opensourcewindows,opensourceMac,apache.org,kde,
常用开源网站:sourceforge,github,foss,launchpad,PortableApps,datamation,opensourcewindows,opensourceMac,apa ...
- kuangbin专题-连通图A - Network of Schools
这道题的意思是就是 问题 1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件. 2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校 ...
- 用复制方式创建表 Create Table tbname as select * from user.tab where ...
用复制方式创建表 Create Table tbname as select * from user.tab where ...
- servicemix-4.5.3 启动日志
karaf@root> log:display 2015-01-12 10:48:03,950 | WARN | rint Extender: 3 | XBeanNamespaceHandle ...
- python基础十之装饰器
1,装饰器的形成 编程原则:开放封闭原则. 开放:对扩展是开放的 封闭:对修改是封闭的 因为修改是封闭的,所以为了对函数进行功能的扩展,就使用装饰器! 2,装饰器的定义 # wrapper就是一个装饰 ...
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- RabbitMQ-事务和Confirm消息确认
,如果要保证消息的可靠性,需要对消息进行持久化处理,然而消息持久化除了需要代码的设置之外,还有一个重要步骤是至关重要的,那就是保证你的消息顺利进入Broker(代理服务器),如图所示: 正常情况下,如 ...
- CSS3 属性学习
fill-available表示撑满可用空间(包括高度,宽度)[此处包括padding和margin会尽可能的撑满,只对于行内块(inline-block)和块元素(block)起作用,webkit内 ...