题目大意

给定一棵 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. libstdc++.so, needed by ../../../rknn_api/arm64-v8a/librknn_api.so, not found
  2. 摩托罗拉:未来一切以手机为中心
  3. 众咖齐聚!2018智能汽车跨界融合高峰论坛开幕在即
  4. js一个按钮弹出两个按钮_车内常见按钮,你却一个不认识?一分钟带你认识车内常见按钮...
  5. django-orm查询功能词
  6. python用什么来写模块-Python 3.1 用C写模块 扩展(序)
  7. JMeter压力测试报告分析
  8. 如何计算CRC循环校验码示例
  9. ES7.16.2基础操作之slop查询(三)
  10. 高仿微信 Windows 端
  11. 用数组实现一个队列改进版
  12. linux 软件覆盖安装,pacman/yaourt安装软件的时候覆盖了/usr/share的symlink链接的问题...
  13. oracle 排序算法,ORACLE的ORDERBY非稳定的排序
  14. 最小二乘法(Least square method)
  15. Linux音频驱动之二:Control接口的调用
  16. Destoon7.0会员中心模板 B2B系统商务中心模板源码下载
  17. 前端基础2——CSS3
  18. UE4 打包常规步骤
  19. 雅思考试流程与应试注意事项
  20. Issue 385 ~蠎周刊 ~汇集全球蠎事儿 ;-)

热门文章

  1. web安全最亲密的战友Burp Suite—网络攻防常用工具介绍--burp suit工具初体验一
  2. 百度/谷歌/搜狗/360搜索/新网站提交与收录入口
  3. SaaSpace:有哪些最好的免费图形数据库软件
  4. SQL SERVER 2约束的创建,删除,重命名
  5. 美国读研计算机 回国后好就业吗,美国留学归国就业前景如何
  6. 交换机与路由器与猫的区别与合作(带简单实例)
  7. css outline是什么意思,用法
  8. 2021年压力管道巡检维护考试技巧及压力管道巡检维护操作证考试
  9. 细说基姆拉尔森日期公式
  10. 如何让手机计算机出现错误二字,手机日历出错了?看到很多人都在讨论“二九”两字,你也去看一下...