题目大意

给定一棵 n n个点的树,每条边有边权cic_i。
定义 g(x,y) g(x,y)表示点 x x到点yy路径上边权的最大值。特殊地 g(x,x)=0 g(x,x)=0。
对于一个序列 {pn}(1≤pi≤n) \{p_n\}(1\le p_i\le n),定义

f(p)=mini=1ng(i,pi)

f(p)=\min_{i=1}^ng(i,p_i)
现在有 n n个限制xix_i,表示 i i在{pn}\{p_n\}中的出现的次数不超过 xi x_i。

1≤ci≤104,1≤xi≤n 1\le c_i\le 10^4,1\le x_i\le n
原数据范围 n≤3000 n\le3000


题目分析

首先有个很显然的想法:二分答案,然后用网络流来判定答案是否可行。于是乎好像可以过掉原数据???
来考虑更优的做法:可以发现网络流的过程其实就是一个二分图匹配,考虑怎么把这个问题套上 Hall Hall定理。
从小到大加边,然后我们可以把联通块缩起来,这个联通块内所有点都要向联通块外的点匹配才能获得当前边权的答案。根据 Hall Hall定理其实就是联通块内点数小于等于联通块外所有点 x x的和才合法。
直接使用并查集搞一搞就可以了。
时间复杂度O(nα(n))O(n\alpha(n))。


代码实现

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cctype>using namespace std;int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) f=ch=='-'?-1:f,ch=getchar();while (isdigit(ch)) x=x*10+ch-'0',ch=getchar();return x*f;
}const int N=3005;struct edge
{int x,y,len;bool operator<(edge const e){return len<e.len;}
}ed[N];int fa[N],rk[N],a[N],size[N];
int n,ans,err,sum;int getfather(int son){return fa[son]==son?son:fa[son]=getfather(fa[son]);}void merge(int x,int y)
{x=getfather(x),y=getfather(y);if (x==y) return;if (rk[x]<rk[y]) swap(x,y);fa[y]=x,rk[x]+=rk[x]==rk[y];err-=sum-a[x]<size[x],err-=sum-a[y]<size[y];size[x]+=size[y],a[x]+=a[y],err+=sum-a[x]<size[x];
}void calc()
{err=0;for (int i=1;i<=n;++i) err+=sum-a[i]<(size[i]=1),fa[i]=i,rk[i]=0;for (int cur=1;cur<n;){if (!err) ans=ed[cur].len;for (int ptr=cur;cur<n&&ed[cur].len==ed[ptr].len;++cur) merge(ed[cur].x,ed[cur].y);}
}int main()
{freopen("planting.in","r",stdin),freopen("planting.out","w",stdout);n=read();for (int i=1;i<n;++i) ed[i].x=read(),ed[i].y=read(),ed[i].len=read();sort(ed+1,ed+n);for (int i=1;i<=n;++i) sum+=a[i]=read();calc(),printf("%d\n",ans);fclose(stdin),fclose(stdout);return 0;
}

[CF444E]DZY Loves Planting相关推荐

  1. Codeforces Round #FF 446 C. DZY Loves Fibonacci Numbers

    參考:http://www.cnblogs.com/chanme/p/3843859.html 然后我看到在别人的AC的方法里还有这么一种神方法,他预先设定了一个阈值K,当当前的更新操作数j<K ...

  2. Codeforces 447C - DZY Loves Sequences

    447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...

  3. Codeforces 446C —— DZY Loves Fibonacci Numbers(线段树)

    题目:DZY Loves Fibonacci Numbers 题意比較简单,不解释了. 尽管官方的题解也是用线段树,但还利用了二次剩余. 可是我没有想到二次剩余,然后写了个感觉非常复杂度的线段树,还是 ...

  4. CF A. DZY Loves Hash

    A. DZY Loves Hash time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. BZOJ 3309 DZY Loves Math

    3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007) ...

  6. HDU 5646 DZY Loves Partition

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5646 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  7. 【BZOJ3512】DZY Loves Math IV(杜教筛)

    [BZOJ3512]DZY Loves Math IV(杜教筛) https://www.cnblogs.com/cjyyb/p/10165338.html

  8. Codeforces 446C. DZY Loves Fibonacci Numbers【斐波那契+线段树】

    C. DZY Loves Fibonacci Numbers [题目描述] 传送门 [题解] 我们可以知道斐波那契数列有两个性质: ∑i=1nFi=Fn+2−F2\sum_{i=1}^{n} F_i= ...

  9. CodeForces 444C. DZY Loves Physics(枚举+水题)

    转载请注明出处:http://blog.csdn.net/u012860063/article/details/37509207 题目链接:http://codeforces.com/contest/ ...

最新文章

  1. 【Win32汇编】复制字符串
  2. wxWidgets:wxEventFilter类用法
  3. PHP stripos strpos,strpos()和stripos()函数的区别
  4. .NET 5 和 C#9 /F#5 一起到来, 向实现 .NET 统一迈出了一大步
  5. 快速修改数组的某个值_我用Python,3分钟快速实现,9种经典排序算法的可视化...
  6. Android自定义View初步
  7. 51单片机(1)-开发工具介绍及软件安装
  8. 页面URL传递中文乱码
  9. 如何导出导入自定义的zendstudio配置文件
  10. Android OpenGL ES纹理总结、纹理坐标系说明、使用代码示例
  11. 服务器上需要高性能显卡吗,英特尔要做独立显卡 只因服务器市场太重要
  12. 浩辰CAD 2019 v190128官方免费版
  13. 腾讯TCA一些笔记,只敲了前几章,以官方文档和教学为主
  14. php curl登录,php curl实现第三方帐号登录
  15. 基于Linux IIO接口的波形采集
  16. 深度相机 物体三维重建_基于深度相机的实时物体三维重建方法与流程
  17. Android 上的SSH软件 connectbot
  18. Codeforces Round #829C CF1753C Wish I Knew How to Sort
  19. 曲线积分与曲面积分总结_高等数学课程内容、知识点总结与典型题
  20. 58同城mysql实践

热门文章

  1. 几大搜索引擎收录入口
  2. oracle和mysql主键有什么不同_mysql 主键与oracle 的不同
  3. 互联网人离不开的协作工具都有哪些
  4. docker原理和镜像管理
  5. python绘图打码_「若快打码」python调用若快打码接口 - seo实验室
  6. 谈谈我在大学期间的一些计算机选修课
  7. 我在Salira的800天(2009.5.20~2011.7.29)
  8. IBM小型机AIX操作系统总结01--基础知识
  9. 科技系列 - 1 :判断键盘上的某个键按下 :KEY_DOWN
  10. 最熟悉的陌生人DOM