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:// ...
随机推荐
- dense并行训练1-流水线并行
并行训练-流水线 简述 并行训练主要有三种策略: 数据并行训练加速比最高,但要求每个设备上都备份一份模型,显存占用比较高,但缺点是通信量大. 张量并行,通信量比较高,适合在机器内做模型并行. 流水线并 ...
- Android系统启动:.rc文件
Android系统启动:.rc文件 reference : https://www.jianshu.com/p/a4c17f0110d0 以init.rc为例. .rc文件 init.rc文件由系统第 ...
- arm linux 移植 i2c-tools 与 简单使用
介绍 i2c-tool是一个专门调试i2c的开源工具.可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能,对于驱动以及应用开发者比较友好. i2c-tool:v3.0.3 ...
- Qt 之 emit、signals、slot的使用
背景 ref : https://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html 信号和槽机制是 QT ...
- flutter 一直卡在Running Gradle task 'assembleDebug'...运行不起来
大概率只有一个原因:gradle下载不完整! 要想办法让他下载完整! 解决方法: 方法一:修改远程maven仓库地址(2024.7.9下列地址可用) repositories{ maven{ url' ...
- 解决方案 | pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)
解决方案:加一个time.sleep(1)即可
- JavaScript处理后端返回PDF文件流,在线预览下载PDF文件
在实际开发业务中,遇到这一需求,即后端返回的pdf文件,是以base64文件流的方式,在此不便操作接口响应等操作,便以上传一个文件转化为文件流的形式模拟 实际应用时,base64Img = res.d ...
- django 设置外键的时候,related_name的值大写还是小写,规则怎样
django 设置外键的时候,related_name的值大写还是小写,规则怎样 在Django中,related_name参数用于定义反向关系的名称,即通过外键字段反向查询关联模型的对象.relat ...
- OpenFileDialog的使用实例
'Dim excelFolderPath As String = "" 'Dim openFileDialog1 As New OpenFileDialog() 'openFile ...
- [rCore学习笔记 010]基于 SBI 服务完成输出和关机
RustSBI的两个职责 它会在计算机启动时进行它所负责的环境初始化工作,并将计算机控制权移交给内核 在内核运行时响应内核的请求为内核提供服务 这里用不太确切的话表述一下,RustSBI作为介于内核和 ...