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]分别表示当前子树 和 已 ...
最新文章
- 使用Windows远程登录Ubuntu
- C#开发ActiveX控件及制作CAB包
- mysql-mmm_MySQL-MMM高可用群集
- linux电脑内存查看工具,Linux内存查看工具---Smem
- python if语句判断字符串_python – 条件If语句:如果行中的值包含字符串…设置另一列等于字符串...
- 1370. 上升下降字符串
- javaScript函数封装
- efi文件错误服务器崩溃,[转自百度]关于系统安装时候弹出提示winload.efi文件损坏...
- journalctl
- matlab中二阶偏导数,matlab中二元函数的一阶和二阶偏导数
- 全民一起VBA提高篇 专题1 第二回 变体终非万全策,数字要分长短型
- python adf检验_ADF检验结果怎么看?
- 简易网页版进程管理器(支持手机管理电脑进程)
- 3 前端面试,js(上)
- CAD三维图自动生成三视图
- 什么叫横向比较和纵向比较
- 有哪些好用的微信群管理工具?
- 直播平台搭建iOS 版本打包上架
- 二叉树的层序遍历-Java
- 辣评10月自主SUV销量:优胜劣汰开始 哪些产品将死得其所?
热门文章
- docker host模式拿到nginx远程ip端口_docker网络模式实战
- 液晶指定位置显示 c语言,大家看看该怎么改才能让12864液晶显示屏显示21个字符啊?...
- ie手机浏览器_最终还是说再见!微软宣布重要消息,IE浏览器被放弃
- 20个你可能不知道的 Linux 网络工具
- 汽车后市场的大数据引擎谁人可造
- 一起来当网管(一)——Windows Server上的DHCP配置
- Cisco ASA防火墙基础--转载http://wenzhongxiang.blog.51cto.com/6370734/1249746
- 小A是支枪,子弹未打光---之手 枪篇
- Java comparator接口源码解读
- Python高性能编程