bzoj 3872: [Poi2014]Ant colony【树形dp+二分】
2018-10-14 18:18
465 查看
啊我把分子分母混了WA了好几次……
就是从食蚁兽在的边段成两棵树,然后dp下去可取的蚂蚁数量区间,也就是每次转移是l[e[i].to]=l[u](d[u]-1),r[e[i].to]=(r[u]+1)(d[u]-1)-1,这里注意当l>maxm的时候就return,不然之后的没有贡献而且会爆long long
然后把每个dp到的叶子都二分一下看他的贡献区间里有几群蚂蚁加进答案里最后乘上k即可
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=1000005; long long n,m,k,h ,cnt,rt1,rt2,a ,d ,l ,r ,ans; struct qwe { long long ne,to; }e[N<<1]; long long read() { long long r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } void add(long long u,long long v) { cnt++; d[u]++; e[cnt].ne=h[u]; e[cnt].to=v; h[u]=cnt; } long long ef(long long w) { long long l=1,r=m,ans=0; while(l<=r) { long long mid=(l+r)>>1; if(a[mid]<=w) l=mid+1,ans=mid; else r=mid-1; } return ans; } void dfs(long long u,long long fa,long long ll,long long rr) { if(ll>a[m]) return; l[u]=ll,r[u]=rr; if(d[u]==1) ans+=ef(r[u])-ef(l[u]-1); for(long long i=h[u];i;i=e[i].ne) if(e[i].to!=fa) dfs(e[i].to,u,ll*(d[u]-1),(rr+1)*(d[u]-1)-1); } int main() { n=read(),m=read(),k=read(); for(long long i=1;i<=m;i++) a[i]=read(); sort(a+1,a+1+m); rt1=read(),rt2=read(); for(long long i=1;i<n-1;i++) { long long x=read(),y=read(); add(x,y),add(y,x); } d[rt1]++,d[rt2]++; dfs(rt1,0,k,k); dfs(rt2,0,k,k); // for(long long i=1;i<=n;i++) // cerr<<l[i]<<" "<<r[i]<<endl; printf("%lld\n",ans*k); return 0; }
相关文章推荐
- 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分
- bzoj 3872: [Poi2014]Ant colony -- 树形dp+二分
- BZOJ3872: [Poi2014]Ant colony 树形DP
- [bzoj3872][Poi2014]Ant colony_树形dp
- BZOJ 3872: [Poi2014]Ant colony 树形dp
- [BZOJ 3872][POI 2014]Ant colony(BFS+二分)
- [BZOJ3872][Poi2014]Ant colony(dfs+二分)
- bzoj 3872: [Poi2014]Ant colony (dfs+二分)
- 【bzoj3522】【poi2014】【hotel】【树形dp】
- BZOJ_3872_[Poi2014]Ant colony_dfs
- 【bzoj3522】[Poi2014]Hotel 树形dp
- BZOJ3522 POI2014HOT-Hotels(树形dp)
- BZOJ3836 [Poi2014]Tourism 【树形dp +状压dp】
- BZOJ 2067 POI 2004 SZN 树形DP 贪心 二分答案
- 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)
- 【XSY1536】【BZOJ3522】【BZOJ4543】【POI2014】Hotel 树形DP 长链剖分 启发式合并
- 【BZOJ3522】[Poi2014]Hotel 树形DP
- 【bzoj3522】[Poi2014]Hotel 树形dp
- BZOJ3872: [Poi2014]Ant colony
- bzoj 2067: [Poi2004]SZN【贪心+二分+树形dp】