[BZOJ 3872][POI 2014]Ant colony(BFS+二分)
来源:互联网 发布:怎么激光编程 编辑:程序博客网 时间:2024/05/16 00:59
题目链接
http://www.lydsy.com/JudgeOnline/problem.php?id=3872
思路
很显然可以考虑倒着来搞,让蚂蚁从食蚁兽所在的两个点开始,倒着往回走,就能得到每个点上至少和至多有多少个蚂蚁,才能让食蚁兽所在的点刚好有
这样就能得到在每个叶节点,要让恰好
代码
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXE 1000010#define MAXV 1000010using namespace std;typedef long long int LL;int S,T;int m[MAXV];LL INF;struct edge{ int u,v,next;}edges[MAXE*2];int head[MAXV],nCount=0;void AddEdge(int U,int V){ edges[++nCount].u=U; edges[nCount].v=V; edges[nCount].next=head[U]; head[U]=nCount;}int degree[MAXV];int n,g,K;int q[MAXE*4];LL L[MAXV],R[MAXV],ans=0;bool vis[MAXV];void BFS(){ memset(vis,false,sizeof(vis)); int h=0,t=0; L[S]=(LL)K*(LL)max((degree[S]-1),1); R[S]=min((LL)(K+1)*(LL)max((degree[S]-1LL),1LL)-1LL,(LL)INF); if(L[S]<INF) q[t++]=S; L[T]=(LL)K*(LL)max((degree[T]-1LL),1LL); R[T]=min((LL)(K+1LL)*(LL)max((degree[T]-1LL),1LL)-1LL,(LL)INF); if(L[T]<INF) q[t++]=T; vis[S]=vis[T]=true; while(h<t) { int u=q[h++]; if(degree[u]==1) { int r=upper_bound(m+1,m+g+1,R[u])-m,l=lower_bound(m+1,m+g+1,L[u])-m; ans+=K*(r-l); } //else { for(int p=head[u];p!=-1;p=edges[p].next) { int v=edges[p].v; if(vis[v]) continue; vis[v]=true; L[v]=L[u]*(LL)(max(degree[v]-1LL,1LL)); R[v]=min((R[u]+1LL)*(LL)(max(degree[v]-1LL,1LL))-1LL,(LL)INF); if(L[v]<INF) q[t++]=v; } } }}int main(){ memset(head,-1,sizeof(head)); scanf("%d%d%d",&n,&g,&K); for(int i=1;i<=g;i++) scanf("%d",&m[i]); sort(m+1,m+g+1); INF=m[g]+1; scanf("%d%d",&S,&T); AddEdge(S,T); AddEdge(T,S); degree[S]++,degree[T]++; for(int i=2;i<n;i++) { int u,v; scanf("%d%d",&u,&v); AddEdge(u,v); AddEdge(v,u); degree[u]++,degree[v]++; } BFS(); printf("%lld\n",ans); return 0;}
0 0
- [BZOJ 3872][POI 2014]Ant colony(BFS+二分)
- bzoj 3872: [Poi2014]Ant colony (dfs+二分)
- BZOJ 3872: [Poi2014]Ant colony 树形dp
- [BZOJ3872][Poi2014]Ant colony(dfs+二分)
- CodeForces 474F Ant colony 【线段树】【gcd】【二分】
- About Ant Colony Optimization
- 【CODEFORCES】 F. Ant colony
- Ant Colony Algorithm
- Ant Colony Optimization
- BZOJ3872: [Poi2014]Ant colony
- POI2014 Ant colony
- Binary Ant Colony Optimization
- Ant Colony Optimization
- BZOJ3872: [Poi2014]Ant colony
- SPOJ - COLONY B - Linearian Colony 二分
- SPOJ-COLONY - Linearian Colony!简单二分思想
- ant colony optimization答辩PPT
- Codeforces 474 F. Ant colony
- 设计模式六大原则(6):开闭原则
- kkpager的改进,Ajax数据变化但是页码不变的问题
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
- Unity3D之迷宫寻路使用_直接寻路
- Binary Tree Level Order Traversal II
- [BZOJ 3872][POI 2014]Ant colony(BFS+二分)
- 引用作为函数返回值
- eclipse c c indexer has encountered a problem
- UIButton 设置圆角 边框颜色 点击回调方法
- W5500的最新驱动库
- js中对邮箱校验的总结
- Triangle
- android xutils框架的使用
- 前后台交互的传参方式与大参数传递