bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战
http://www.lydsy.com/JudgeOnline/problem.php?id=2286
虚树上树形DP
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>using namespace std;#define N 250001typedef long long LL;int tot;int n,lim; int front[N],to[N<<1],nxt[N<<1],val[N<<1];int Vfront[N],Vto[N],Vnxt[N];int id[N];int siz[N],bl[N],dep[N];int st[N],top;int mi[N],fa[N];int use[N]; bool imp[N];int tmp[N],cnt;void read(int &x) {x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0';c=getchar();} }void add(int u,int v,int w) {to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; val[tot]=w;to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; val[tot]=w; }void dfs1(int x) {siz[x]=1;for(int i=front[x];i;i=nxt[i])if(to[i]!=fa[x]){fa[to[i]]=x;dep[to[i]]=dep[x]+1;mi[to[i]]=min(mi[x],val[i]);dfs1(to[i]);siz[x]+=siz[to[i]];} }void dfs2(int x,int top) {bl[x]=top;id[x]=++tot;int y=0;for(int i=front[x];i;i=nxt[i])if(to[i]!=fa[x] && siz[to[i]]>siz[y]) y=to[i];if(y) dfs2(y,top);else return;for(int i=front[x];i;i=nxt[i])if(to[i]!=fa[x] & to[i]!=y) dfs2(to[i],to[i]); }int get_lca(int u,int v) {while(bl[u]!=bl[v]){if(dep[bl[u]]<dep[bl[v]]) swap(u,v);u=fa[bl[u]];}return dep[u]<dep[v] ? u : v; }void Vadd(int u,int v) {Vto[++tot]=v; Vnxt[tot]=Vfront[u]; Vfront[u]=tot; }bool cmp(int p,int q) {return id[p]<id[q]; }void build(int m) {tot=0;sort(use+1,use+m+1,cmp);st[top=1]=1;tmp[cnt=1]=1;int lca,x;for(int i=1;i<=m;++i){x=use[i];lca=get_lca(st[top],x);while(id[lca]<id[st[top]]){if(id[lca]>=id[st[top-1]]){Vadd(lca,st[top]);if(lca!=st[--top]) {st[++top]=lca;tmp[++cnt]=lca;}break;}Vadd(st[top-1],st[top]);top--;}st[++top]=x;tmp[++cnt]=x; }while(top>1) {Vadd(st[top-1],st[top]); top--;} } LL DP(int x) {LL s=0;for(int i=Vfront[x];i;i=Vnxt[i]) s+=DP(Vto[i]);if(!s || imp[x]) return mi[x];else if(x==1) return s;return min((LL)mi[x],s); }int main() {read(n);int u,v,w;for(int i=1;i<n;++i){read(u); read(v); read(w);add(u,v,w);}mi[1]=1e9;dfs1(1);tot=0;dfs2(1,1);int m;read(m);int k,x;while(m--){read(k);for(int i=1;i<=k;++i){read(x);use[i]=x;imp[x]=true;}build(k);cout<<DP(1)<<'\n';for(int i=1;i<=k;++i) imp[use[i]]=false; for(int i=1;i<=cnt;++i) Vfront[tmp[i]]=0;}return 0; }
2286: [Sdoi2011]消耗战
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 4777 Solved: 1756
[Submit][Status][Discuss]
Description
Input
第一行一个整数n,代表岛屿数量。
接下来n-1行,每行三个整数u,v,w,代表u号岛屿和v号岛屿由一条代价为c的桥梁直接相连,保证1<=u,v<=n且1<=c<=100000。
第n+1行,一个整数m,代表敌方机器能使用的次数。
接下来m行,每行一个整数ki,代表第i次后,有ki个岛屿资源丰富,接下来k个整数h1,h2,…hk,表示资源丰富岛屿的编号。
Output
输出有m行,分别代表每次任务的最小代价。
Sample Input
1 5 13
1 9 6
2 1 19
2 4 8
2 3 91
5 6 8
7 5 4
7 8 31
10 7 9
3
2 10 6
4 5 7 8 3
3 9 4 6
Sample Output
32
22
HINT
对于100%的数据,2<=n<=250000,m>=1,sigma(ki)<=500000,1<=ki<=n-1
转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8481231.html
bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战相关推荐
- BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...
- BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...
- BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
http://www.lydsy.com/JudgeOnline/problem.php?id=1820 很容易想到dp[i][a][b][c] 到第i个收件地点,三个司机分别在a,b,c 收件地点的 ...
- bzoj千题计划303:bzoj4827: [Hnoi2017]礼物
https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子化简一下,发现最后只跟 Σ xi*yi 有关 第二个序列反转,就可以用FFT优化 注意: ...
- bzoj千题计划248:bzoj3697: 采药人的路径
http://www.lydsy.com/JudgeOnline/problem.php?id=3697 点分治 路径0改为路径-1 g[i][0/1] 和 f[i][0/1]分别表示当前子树 和 已 ...
最新文章
- 求解稀疏优化问题——增广拉格朗日方法+半光滑牛顿法
- 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)
- 最新!全球学术排名出炉:18所中国大学位居世界100强
- 线索二叉树代码实现 - 数据结构和算法49
- python3安装常见问题_python3中pip的安装、常见问题及万能解决方案。
- 静态主席树总结(静态区间的k大)
- 闲来无事刷水题、简单博弈论专题、sg函数、洛谷
- 2018年华北五省计算机应用大赛参赛作品--战拖儿app
- html5游戏毕业答辩ppt,毕业论文答辩ppt格式(超详细解释)
- C# OpenXml组件
- 百分之99的人都不知道的Python爆破ZIP文件
- 昭阳K43/E43系列网卡功能相关说明
- 用 construct 2 制作简易弹幕游戏
- PUT和POST的区别
- 神器 | 教你去除视频马赛克
- Abp Core 添加短信验证码登录(动态密码登录)
- 工欲善其事必先利其器,利用搜狗输入法设置代码片段
- C语言中-含义,比如说 p=p-next
- 苹果xr十大隐藏功能_苹果手机有哪些隐藏小功能?【建议收藏】
- 小数除法用计算机探索规律教学反思,小数除法教学反思