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:// ...
随机推荐
- ODPS 不用循环生成连续日期
生成 20230801 ~ 20230831之间的每一天的sql代码怎么写? 只要一行代码. 一行代码: select TO_CHAR(DATEADD(TO_DATE(bizdate,'yyyymmd ...
- Android7.0 配置JACK支持多用户同时编译
# Android7.0 配置JACK支持多用户同时编译 reference: https://blog.csdn.net/whorus1/article/details/80364772 https ...
- get基于报错的sql注入
get基于报错的sql注入发现 Less1: sqli-labs第一关提示说在网页上输入id,也就是?id=1. 但这个?是什么意思,它表示index.php?也就是默认页面.然后?id=1就是把id ...
- day01小程序快速入门
这几天正式开始微信小程序的修炼了,就目前而言来看简直就是vue和react的结合体,所以在学小程序前,先把框架熟悉还是挺有用的. 一.简介 1.1与普通网页区别 二.第一个小程序 需要注册小程序开发账 ...
- Nuxt.js 错误侦探:useError 组合函数
title: Nuxt.js 错误侦探:useError 组合函数 date: 2024/7/14 updated: 2024/7/14 author: cmdragon excerpt: 摘要:文章 ...
- 2行JS代码实现Vue全选和反选
实现效果: 第一行:子选项的选中状态 等于 全选框的状态 this.letters.forEach(item => item.check = this.checkAll) 第二行: 使用数组 e ...
- VS Code 开发统一代码格式化配置
eslint: 是用来做代码风格检查的,比较关注代码质量,并且会提示不符合风格规范的代码,也有一部分代码格式化的功能.不是消除空行. "editor.formatOnSave": ...
- 国赛2024 simple_php(三种方法)
<?php ini_set('open_basedir', '/var/www/html/'); error_reporting(0); if(isset($_POST['cmd'])){ $c ...
- [oeasy]python0010_怎么用命令行保存文件
编写 py 文件 回忆上次内容 上次 真的输出了 程序员的浪漫 Hello world! print函数 可以输出 字符串 但是 print这个词 别拼错 就连 大小写 也别能错 错了就改 也没事 ...
- C语言数据类型转换(自动类型转换+强制类型转换)
自动类型转换 1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如: float f = 100; int n = f; f 是 float 类型的数据,需要先转换为 int 类 ...