#include<cstdio>
#include<iostream>
#define M 1000009
#define N 250009
#define ll long long
#define inf 1000000000000000000LL
#include<algorithm>
using namespace std;
int n,head[N],next[M],u[M],cnt,fa[N][],deep[N],m,h[N],dfn[N],TI,cnt1,zhan[N],tot,head1[N];
int next1[M],u1[M],v[M];
ll mn[N],f[N];
void jia(int a1,int a2,int a3)
{
cnt++;
next[cnt]=head[a1];
head[a1]=cnt;
u[cnt]=a2;
v[cnt]=a3;
return;
}
void jia2(int a1,int a2)
{
if(a1==a2)
return;
cnt1++;
next1[cnt1]=head1[a1];
head1[a1]=cnt1;
u1[cnt1]=a2;
return;
}
void dfs(int a1)
{
dfn[a1]=++TI;
for(int i=;(<<i)<=deep[a1];i++)
fa[a1][i]=fa[fa[a1][i-]][i-];
for(int i=head[a1];i;i=next[i])
if(u[i]!=fa[a1][])
{
deep[u[i]]=deep[a1]+;
fa[u[i]][]=a1;
mn[u[i]]=min(mn[a1],(ll)v[i]);
dfs(u[i]);
}
}
bool cmp(int a1,int a2)
{
return dfn[a1]<dfn[a2];
}
int lca(int a1,int a2)
{
if(deep[a1]<deep[a2])
swap(a1,a2);
int a3=deep[a1]-deep[a2];
for(int i=;i<=;i++)
if(a3&(<<i))
a1=fa[a1][i];
for(int i=;i>=;i--)
if(fa[a1][i]!=fa[a2][i])
{
a1=fa[a1][i];
a2=fa[a2][i];
}
if(a1==a2)
return a1;
return fa[a1][];
}
void dp(int a1)
{
ll tmp=;
f[a1]=mn[a1];
for(int i=head1[a1];i;i=next1[i])
{
dp(u1[i]);
tmp+=f[u1[i]];
}
head1[a1]=;
if(tmp<f[a1]&&tmp)
f[a1]=tmp;
return;
}
void solve()
{
cnt1=;
scanf("%d",&h[]);
for(int i=;i<=h[];i++)
scanf("%d",&h[i]);
sort(h+,h+h[]+,cmp);
int tot=;
h[++tot]=h[];
for(int i=;i<=h[];i++)
if(lca(h[tot],h[i])!=h[tot])h[++tot]=h[i];
h[]=tot;
tot=;
zhan[++tot]=;
for(int i=;i<=h[];i++)
{
int f=lca(h[i],zhan[tot]);
for(;;)
{
if(deep[f]>=deep[zhan[tot-]])
{
jia2(f,zhan[tot]);
tot-=;
if(zhan[tot]!=f)
{
tot+=;
zhan[tot]=f;
}
break;
}
jia2(zhan[tot-],zhan[tot]);
tot-=;
}
if(h[i]!=zhan[tot])
{
tot+=;
zhan[tot]=h[i];
}
}
for(;tot>;jia2(zhan[tot-],zhan[tot]),tot--);
dp();
printf("%lld\n",f[]);
return;
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
int a1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
jia(a1,a2,a3);
jia(a2,a1,a3);
}
mn[]=inf;
dfs();
scanf("%d",&m);
for(int i=;i<=m;i++)
solve();
return ;
}

显然想到DP,然而DP超时,这个题是构建虚树,然后DP。

bzoj 2286: [Sdoi2011消耗战的更多相关文章

  1. BZOJ 2286: [Sdoi2011]消耗战

    2286: [Sdoi2011消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2082  Solved: 736[Submit][Status] ...

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

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

  3. bzoj 2286 [Sdoi2011]消耗战(虚树+树上DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题意] 给定一棵树,切断一条树边代价为ci,有m个询问,每次问使得1号点与查询 ...

  4. bzoj 3611: [Heoi2014]大工程 && bzoj 2286: [Sdoi2011消耗战

    放波建虚树的模板. 大概是用一个栈维护根节点到当前关键点的一条链,把其他深度大于lca的都弹出去. 每次做完记得复原. 还有sort的时候一定要加cmp!!! bzoj 3611 #include&l ...

  5. BZOJ 2286: [Sdoi2011]消耗战 虚树 树形dp 动态规划 dfs序

    https://www.lydsy.com/JudgeOnline/problem.php?id=2286 wa了两次因为lca犯了zz错误 这道题如果不多次询问的话就是裸dp. 一棵树上多次询问,且 ...

  6. BZOJ.2286.[SDOI2011]消耗战(虚树 树形DP)

    题目链接 BZOJ 洛谷P2495 树形DP,对于每棵子树要么逐个删除其中要删除的边,要么直接断连向父节点的边. 如果当前点需要删除,那么直接断不需要再管子树. 复杂度O(m*n). 对于两个要删除的 ...

  7. BZOJ 2286 [Sdoi2011]消耗战(虚树+树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题目大意] 出一棵边权树,每次给出一些关键点,求最小边割集, 使得1点与各个关 ...

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

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

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

    传送门 题意: 删除价值和最小的边使得$1$号点与$k$个关键点不连通 一个树形DP...但是询问多次,保证总的关键点数为$O(n)$ 先说一下这个$DP$ $f[i]$表示子树$i$中的关键点与$1 ...

随机推荐

  1. mvn编写主代码与测试代码

    maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...

  2. linux查看文件夹大小

    du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)/文件的大小,并按文件大小排序 ------------------------------------- ...

  3. hdu 4870 Rating

    题目链接:hdu 4870 这题应该算是概率 dp 吧,刚开始看了好几个博客都一头雾水,总有些细节理不清楚,后来看了 hdu 4870 Rating (概率dp) 这篇博客终于有如醍醐灌顶,就好像是第 ...

  4. gdufs 1237 最优分解问题

    题目链接:http://cstfs.gdufs.edu.cn:8080/JudgeOnline/problem.jsp?id=1237 (好像是内网的0.0) 简单来说,这道题目就是把一个数分解为若干 ...

  5. 多列布局 css3 column属性

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  6. JDK里面常用的包

    1.java.lang-------java里的核心类,如String.Math.Integer.System.Thread,java.lang里还有一个子包:java.lang.reflect用于实 ...

  7. vm 安装 vcenter 本主要记录选择l现有的受支持数据库

    1.将先决条件安装完毕. 安装 .NET3.5 全部下一步记录设置的密码.备忘.

  8. Android Toolbar样式定制详解

    前言 Marterial Design出来也有一段时间了,为了紧跟Google的设计规范,决定在项目中使用Toolbar.使用了一段时间之后,发现很多时候原始的Toolbar并不能满足项目的要求.为了 ...

  9. parent relation column can't be updated LESSON_EXTENDED_ATTRIBUTE->LESSON_ID

    MyCat  中 作为分片的主键不允许更新 , 需要设置为null,调用updateSelectiveByPrimaryKey来更新数据 parent relation column can't be ...

  10. Nodejs 配置+基础

    Nodejs + NPP 配置. http://blog.csdn.net/foruok/article/details/48366765 NPM的全称是Node Package Manager,它就 ...