问题描述

LG2495


题解

虚树


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; #define int long long template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
} const int maxn=250007;
const int INF=0x3f3f3f3f3f3f3f3fLL; int n,T,k;
int tot,Head[maxn],to[maxn<<2],Next[maxn<<2],w[maxn<<2]; int size[maxn],son[maxn],mn[maxn];
int fa[maxn],dep[maxn],top[maxn];
int dfn[maxn],ind; void add(int x,int y,int z){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z;
} void dfs1(int x,int f,int dp){
fa[x]=f,dep[x]=dp,size[x]=1;
int mx=-1;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y==f) continue;
mn[y]=min(mn[x],w[i]);
dfs1(y,x,dp+1);size[x]+=size[y];
if(size[y]>mx) mx=size[y],son[x]=y;
}
} void dfs2(int x,int tp){
top[x]=tp,dfn[x]=++ind;
if(!son[x]) return;
dfs2(son[x],tp);
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y==fa[x]||y==son[x]) continue;
dfs2(y,y);
}
} int lca(int x,int y){
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]]) swap(x,y);
x=fa[top[x]];
}
if(dep[x]>dep[y]) swap(x,y);
return x;
} int s[maxn],ttop;
int a[maxn];
vector<int>v[maxn]; void insert(int x){
if(ttop==1){s[++ttop]=x;return;}
int lc=lca(x,s[ttop]);
if(lc==s[ttop]) return;
while(ttop>1&&dfn[s[ttop-1]]>=dfn[lc]){
v[s[ttop-1]].push_back(s[ttop]);ttop--;
}
if(lc!=s[ttop]){v[lc].push_back(s[ttop]);s[ttop]=lc;}
s[++ttop]=x;
} bool comp(int a,int b){
return dfn[a]<dfn[b];
} int dp(int x){
if(!v[x].size()) return mn[x];
int res=0;
for(int i=0;i<v[x].size();i++){
res+=dp(v[x][i]);
}
v[x].clear();
return min(res,mn[x]);
} signed main(){
read(n);mn[1]=INF;
for(int i=1,x,y,z;i<n;i++){
read(x);read(y);read(z);
add(x,y,z);add(y,x,z);
}
dfs1(1,0,1);dfs2(1,1);
read(T);
while(T--){
read(k);
for(int i=1;i<=k;i++) read(a[i]);
sort(a+1,a+k+1,comp);
s[ttop=1]=1;
for(int i=1;i<=k;i++) insert(a[i]);
while(ttop>0) v[s[ttop-1]].push_back(s[ttop]),ttop--;
printf("%lld\n",dp(1));
}
return 0;
}

LG2495 「SDOI2011」消耗战 虚树的更多相关文章

  1. 【BZOJ2286】【SDOI2011】消耗战 [虚树][树形DP]

    消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1 ...

  2. [SDOI2011][bzoj2286] 消耗战 [虚树+dp]

    题面: 传送门 思路: 看到所有询问中的点数总和是十万级别的,就想到用虚树~\(≧▽≦)/~啦 首先,树形dp应该是很明显可以看出来的: 设dp[u]表示以u为根的子树(不包括u)中的宝藏岛全部切断的 ...

  3. loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点

    loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...

  4. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】

    题目大意 给你\(k\)个点,让这一些点和一号节点断开,删去某一些边,求最小的删去边权之和. 做题的心路历程 做了\(HG\)昨天的模拟赛,深深感觉到了窝的菜,所以为了\(A\)掉T1这一道毒瘤,窝就 ...

  5. bzoj 2286: [Sdoi2011]消耗战 虚树+树dp

    2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一 ...

  6. [BZOJ2286][SDOI2011]消耗战(虚树DP)

    2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4998  Solved: 1867[Submit][Statu ...

  7. 【BZOJ2286】[Sdoi2011]消耗战 虚树

    [BZOJ2286][Sdoi2011]消耗战 Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的 ...

  8. bzoj 2286 [Sdoi2011]消耗战 虚树+dp

    题目大意:多次给出关键点,求切断边使所有关键点与1断开的最小费用 分析:每次造出虚树,dp[i]表示将i和i子树与父亲断开费用 对于父亲x,儿子y ①y为关键点:\(dp[x]\)+=\(dismn( ...

  9. 【BZOJ】2286: [Sdoi2011]消耗战 虚树+DP

    [题意]给定n个点的带边权树,每次询问给定ki个特殊点,求隔离点1和特殊点的最小代价.n<=250000,Σki<=500000. [算法]虚树+DP [题解]考虑普通树上的dp,设f[x ...

随机推荐

  1. python3的ExecJS安装使用

    参考官方文档安装 pip3 install PyExecJS 代码编写 import execjs ctx = execjs.compile(""" function a ...

  2. CMake使用总结(一)

    当我们在写CMakeLists.txt文件时,常常会搞不明白link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下面就其详细介绍 ...

  3. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

  4. linux系列之常用运维命令整理笔录

    目录 本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍 ...

  5. PELT算法

    参考:http://www.wowotech.net/process_management/PELT.html 本文是对https://lwn.net/Articles/531853/的翻译 mark ...

  6. 在IDEA中用Maven打包大项目时失败问题

    今天在完成公司里某项功能开发时,准备用Maven打包,后来在打包的过程中报错:OutOfMemoryError.如下图: 后来经过查找资料,发现可以配置一下Maven的参数即可解决此问题. 配置参数为 ...

  7. 使用maven快速入门

    Maven 基础知识 官网: 传送门 Maven 项目结构 $ MavenProject |-- pom.xml |-- src | |-- main | | `-- java | | `-- res ...

  8. .net core使用NLog日志

    前言:NLog日志对.net core web项目最新的支持在官网上有最新的介绍: 官网介绍地址:https://github.com/NLog/NLog/wiki/Getting-started-w ...

  9. windows7_删除”右键-新建“菜单中的多余项

    这边文章比较好用:分享下 https://blog.csdn.net/ddgweb/article/details/17993251 在使用windows7的过程中,由于安装了较多的软件,在桌面或者资 ...

  10. 运行时报:尝试加载 Oracle 客户端库时引发 BadImageFormatException,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题

    运行环境为: Windows Server2012 Oracle11g  32位数据库+客户端 IIS发布后提示错误信息: “尝试加载 Oracle 客户端库时引发 BadImageFormatExc ...