当前位置:网站首页>ARC115F Migration
ARC115F Migration
2022-07-30 13:40:00 【With a cool moon】
二分答案.
鉴于 n n n 比较小,先 O ( n 2 ) \mathcal O(n^2) O(n2) Preprocess to figure out where each point optimally jumps to,Make the path maximum value as small as possible,It is guaranteed that it cannot jump to the origin, the weight is less than or equal to the root, and the number is as small as possible.
考虑二分答案 l i m lim lim,Each jumps the optimal point from the start node and the end node respectively,Skip to weights and over l i m lim lim 为止,Finally, determine whether the corresponding two points are equal,单次时间复杂度 O ( k n ) \mathcal O(kn) O(kn).
时间复杂度 O ( n 2 log V ) \mathcal O(n^2\log V) O(n2logV).
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ha putchar(' ')
#define he putchar('\n')
typedef long long ll;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
x = x * 10 + c - '0', c = getchar();
return x * f;
}
inline void write(int x)
{
if(x < 0)
{
putchar('-');
x = -x;
}
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
const int _ = 4010;
int n, k, w[_], a[_], A[_], B[_], val[_], f[_], rt, tot, head[_], to[_ << 1], nxt[_ << 1], s[_], t[_];
void add(int u, int v)
{
to[++tot] = v, nxt[tot] = head[u], head[u] = tot;
}
void dfs(int u, int fa, int z)
{
z = max(z, w[u]), a[u] = z;
if(w[u] < w[rt] || (w[u] == w[rt] && u < rt))
if(!f[rt] || a[u] < a[f[rt]]) f[rt] = u;
for(int i = head[u]; i; i = nxt[i])
if(to[i] ^ fa) dfs(to[i], u, z);
}
bool check(int x)
{
int s1 = 0, s2 = 0;
for(int i = 1; i <= k; ++i) A[i] = s[i], B[i] = t[i], s1 += w[A[i]], s2 += w[B[i]];
if(s1 > x || s2 > x) return 0;
while (1)
{
bool flg = 0;
for(int i = 1; i <= k; ++i)
if (f[A[i]] && s1 - w[A[i]] + val[A[i]] <= x) s1 = s1 - w[A[i]] + w[f[A[i]]], A[i] = f[A[i]], flg = 1;
for(int i = 1; i <= k; ++i)
if (f[B[i]] && s2 - w[B[i]] + val[B[i]] <= x) s2 = s2 - w[B[i]] + w[f[B[i]]], B[i] = f[B[i]], flg = 1;
if(!flg) break;
}
for(int i = 1; i <= k; ++i)
if (A[i] ^ B[i]) return 0;
return 1;
}
signed main()
{
n = read();
for(int i = 1; i <= n; ++i) w[i] = read();
for(int i = 1, u, v; i < n; ++i)
{
u = read(), v = read();
add(u, v), add(v, u);
}
k = read();
for(int i = 1; i <= k; ++i) s[i] = read(), t[i] = read();
for(int i = 1; i <= n; ++i)
{
rt = i;
memset(a, 0, sizeof a);
dfs(i, i, w[i]);
val[i] = a[f[i]];
}
int l = 0, r = 2e12, mid;
ll ans = 0;
while(l <= r)
{
mid = (l + r) >> 1;
if(check(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
write(ans), he;
return 0;
}
边栏推荐
- TaskDispatcher source code parsing
- 【微信小程序】一文带你搞懂小程序的页面配置和网络数据请求
- How to solve the problem that the page does not display the channel configuration after the EasyNVR is updated to (V5.3.0)?
- Jackson 的JAR包冲突问题
- 58. 最后一个单词的长度
- 【23考研】408代码题参考模板——链表
- R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用ggpar函数改变图形化参数(xlab、ylab、改变可视化图像的坐标轴标签内容)
- DeFi 巨头进军 NFT 领域 用户怎么看?
- 自从外包干了四年,基本废了...
- 重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
猜你喜欢
Apache Log4j2漏洞
Eleven BUUCTF questions (06)
jsArray array copy method performance test 2207300823
大手笔!两所“双一流”大学,获75亿元重点支持!
shell 编程规范与变量
阿里 P7 到底是怎样的水平?
Logic Vulnerability----Permission Vulnerability
当下,产业园区发展面临的十大问题
重保特辑|拦截99%恶意流量,揭秘WAF攻防演练最佳实践
The way of programmers' cultivation: do one's own responsibilities, be clear in reality - lead to the highest realm of pragmatism
随机推荐
Tutorial on using the one-key upgrade function of the RTSP/Onvif video platform EasyNVR service
CF1320E Treeland and Viruses
TaskDispatcher source code parsing
判断链表是否有环
What are the hard-core upgrades and applications that cannot be missed in Greenplum 6.0?
05 | login background: based on the password login mode (below)
canvas彩虹桥动画js特效
[PostgreSQL] - 存储结构及缓存shared_buffers
jsArray数组复制方法性能测试2207300040
dolphinscheduler adds hana support
matlab画图,仅显示部分图例
R语言使用aov函数进行单因素协方差分析(One-way ANCOVA)、使用effects包中的effect函数来计算调整后的分组均值(calculate adjusted means)
Hu-cang integrated e-commerce project (1): project background and structure introduction
20220729 证券、金融
二手手机销量突破3亿部,与降价的iPhone夹击国产手机
第十四天笔记
自动化测试的生命周期是什么?
CF780G Andryusha and Nervous Barriers
戴墨镜的卡通太阳SVG动画js特效
for循环的3个表达式执行顺序