2022 CCPC 广州站 Alice and Her Lost Cat
1 #include <bits/stdc++.h>
2 using namespace std;
3 #define rg register
4 #define ll long long
5 #define ld long double
6 #define FOR(i,a,b) for(register int i=a;i<=b;++i)
7 #define For(i,a,b) for(register int i=a;i>=b;--i)
8 static char buf[100000],*pa(buf),*pb(buf);
9 inline int rd();inline void wrt(int x);inline ll rdll();inline void wrtll(ll x);
10 #define gc getchar()
11 const ll INF=1E+17,modd=998244353,N=2E+3+10;
12
13 int T,n,fa[N],mx1[N];
14 ll a[N],t[N],f[N][N][2],bagg[N],bg[N][2],ans;
15 vector<int> chd[N],cd[N];
16 bool vis[N],vis1[N];
17
18 void ps(int u)
19 {
20 vis1[u]=1;
21 FOR(i,0,int(cd[u].size())-1)
22 {
23 int v=cd[u][i];
24 if(vis1[v])
25 {
26 chd[v].push_back(u);
27 fa[u]=v;
28 }
29 else ps(v);
30 }
31 }
32
33 void doo(int u)
34 {
35 vis[u]=1;
36 if(chd[u].size()==0)
37 {
38 f[u][0][1]=0;
39 f[u][0][0]=a[u];
40 f[u][1][0]=0;
41 mx1[u]=1;return;
42 }
43 FOR(i,0,int(chd[u].size())-1)
44 {
45 int v=chd[u][i];
46 if(!vis[v]) doo(v);
47 mx1[u]+=mx1[v];
48 }
49 //bb1
50 memset(bagg,3,sizeof(bagg));bagg[0]=0;
51 FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0)
52 {
53 bagg[j]=bagg[j]+f[chd[u][i]][0][0];
54 FOR(k,1,j)
55 bagg[j]=min(bagg[j],bagg[j-k]+f[chd[u][i]][k][0]);
56 }
57 FOR(i,0,mx1[u]) f[u][i][0]=min(f[u][i][0],bagg[i]);
58 //bb2
59 memset(bagg,3,sizeof(bagg));bagg[0]=0;
60 FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0)
61 {
62 bagg[j]=bagg[j]+min(f[chd[u][i]][0][0],f[chd[u][i]][0][1]);
63 FOR(k,1,j)
64 bagg[j]=min(bagg[j],bagg[j-k]+min(f[chd[u][i]][k][0],f[chd[u][i]][k][1]));
65 }
66 FOR(i,0,mx1[u]) f[u][i][0]=min(f[u][i][0],bagg[i]+a[u]);
67 //bb3
68 memset(bg,3,sizeof(bg));bg[0][0]=0;
69 FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0)
70 {
71 bg[j][1]=min(bg[j][1]+f[chd[u][i]][0][0],bg[j][0]+f[chd[u][i]][0][1]);
72 bg[j][0]=bg[j][0]+f[chd[u][i]][0][0];
73 FOR(k,1,j)
74 bg[j][1]=min(bg[j][1],bg[j-k][0]+f[chd[u][i]][k][1]),
75 bg[j][1]=min(bg[j][1],bg[j-k][1]+f[chd[u][i]][k][0]),
76 bg[j][0]=min(bg[j][0],bg[j-k][0]+f[chd[u][i]][k][0]);
77 }
78 FOR(i,0,mx1[u]) f[u][i][1]=min(f[u][i][1],min(bg[i][0],bg[i][1]));
79 return;
80 }
81
82 int main()
83 {
84 T=rd();while(T--){
85 memset(f,3,sizeof(f));
86 ans=INF;
87 memset(mx1,0,sizeof(mx1));
88 memset(vis,0,sizeof(vis));
89 memset(vis1,0,sizeof(vis1));
90 //f0
91 n=rd();
92 FOR(i,1,n) chd[i].clear(),cd[i].clear();
93 //FOR(i,1,n) cout<<chd[i].size()<<" ";cout<<endl;
94 FOR(i,1,n) a[i]=rdll();
95 FOR(i,1,n) t[i]=rdll();
96 FOR(i,1,n-1)
97 {
98 int u=rd(),v=rd();
99 cd[u].push_back(v);
100 cd[v].push_back(u);
101 }
102 ps(1);
103 doo(1);
104 FOR(i,0,mx1[1]) ans=min(ans,t[i]+min(f[1][i][0],f[1][i][1]));
105 cout<<ans<<endl;
106 }return 0;
107 }
108 inline int rd()
109 {
110 register int x(0);register char c(gc);bool bbb=1;
111 if(c=='-') {bbb=0;c=gc;}
112 while(c<'0'||c>'9')c=gc;
113 while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=gc;
114 if(bbb)return x;else return -x;
115 }
116 inline ll rdll()
117 {
118 register ll x(0);register char c(gc);bool bbb=1;
119 if(c=='-') {bbb=0;c=gc;}
120 while(c<'0'||c>'9')c=gc;
121 while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=gc;
122 if(bbb)return x;else return -x;
123 }
2022 CCPC 广州站 Alice and Her Lost Cat的更多相关文章
- python-广度优先搜索
广度优先搜索 下面我们来来BFS算法策略: 比如:我们要从双子峰---->金门大桥,最短路径如何? 我们利用广度优先搜索来一步步求解,注意广度优先搜索在于的关键在于"广",也 ...
- 【译】深入理解Rust中的生命周期
原文标题:Understanding Rust Lifetimes 原文链接:https://medium.com/nearprotocol/understanding-rust-lifetimes- ...
- Codeforces Round#630 div2 A~C题解
...
- Ceph 管理和使用
ceph 管理 上次介绍了Ceph集群架构并且搭建了ceph集群,本节介绍ceph用户认证流程和挂载.cephFS.ceph RBD以及ceph mds高可用 1. ceph 授权流程和用户权限管理 ...
- 【docker专栏2】CentOS操作系统安装DockerCE
目录 一.前置要求 二.更新软件源信息 三.安装 Docker-CE 四.卸载Docker CE 为大家介绍在CentOS操作系统中安装docker的过程,linux其他发行版本安装docker方法可 ...
- 几个Shell脚本的例子
[例子:001]判断输入为数字,字符或其他 #!/bin/bash read -p "Enter a number or string here:" input case $inp ...
- 2018 CCPC 桂林站(upc复现赛)补题
2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...
- CCPC 2020 长春站 部分简略题解
gym链接:CCPC 2020 changchun site A: 题目大意:商店里有若干个充值档位和首充奖励,你有\(n\)块钱问最多能拿到多少水. 解:由于档位不多可以直接枚举,整个二进制枚举一下 ...
- cloudstack-4.1.5版本最全入门笔记【2022】
cloudstack简介 CloudStack是一个开源的具有高可用性及扩展性的云计算平台.目前Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMwar ...
- How to code like a pro in 2022 and avoid If-Else
在浏览文章的时候发现了一篇叙述有关if-else语句的文章,这篇文章作者是Thai Tran,他原文是用英语写的,然后看着文章浅显易懂,便尝试翻译成汉语.如有不妥还望指出. 原文链接:https:// ...
随机推荐
- 你了解Vim的增删改查吗 ?
增: 在Vim的Normal模式中输入A/I/O,a/i/o字符进行对应的增加操作. 删 在Vim的Normal模式中, 输入x 删除光标对应的一个字符(4x代表删除4个字符): 输入dd删除光标所在 ...
- python3 安装pyodbc失败 pip3 install pyodbc
python3 安装pyodbc失败 报错1: 关键报错信息: fatal error: sql.h: No such file or directory [root@centfos python3 ...
- 理解Node.js 的重要概念
Node.js是什么 Node.js是JavaScript的运行时(runtime),终于脱离了浏览器也能运行JavasScript了.同时,Node.js又暴露fs,http等对象给JS,使JS能够 ...
- 12 二次打开pdf失败
h5 安卓 iOS均出现pdf二次打开失败
- Python 生成条形码、二维码 (Code 128、EAN-13、QR code等)
条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,被广泛应用于物流.零售.医疗.教育等各领域.本文将介绍如何使用Python快速生成各种常见的条形码 ...
- ping和tcping的区别
ping是简单的测试网络连接情况的小命令,但是ping无法直接ping端口.某些网站还防ping,tcping工具也是通过ping来测试但是他能看端口是否打开
- DataGridView1列宽根据内容自适应
DataGridView1列宽根据内容自适应 在使用DataGridView控件时,要使列宽根据内容自适应,你可以使用DataGridView的AutoResizeColumns方法.这个方法允许你根 ...
- 题解:P10329 [UESTCPC 2024] Add
Add 题意 将序列进行一系列的操作,输出对 \(a_{1}\) 的期望值. 题目中操作说的比较明了,再次就不特殊声明了. 思路 据题意所知,每一个 \(n\) 应该对应了一个固定的答案. 于是我就想 ...
- 初读Nginx
Nginx反向代理:将前端发送的动态请求由Nginx转发到后端服务器 NGINX的好处: 可以缓存,提高访问速度 负载均衡:当请求量过大时,可以按指定方式均衡的分配给集群中的每台服务器 保证后端服务安 ...
- k8s(3) 集群运行
Master下面执行 mkdir -p $HOME/.kube 执行的脚本,需要读取的配置文件 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config ...