P2495 [SDOI2011]消耗战

P2495 [SDOI2011]消耗战

题目描述

详见:P2495 [SDOI2011]消耗战

Solution

此题是虚树的经典版子题吧qwq。

是不是直接贴代码就行了啊(反正不是luogu题解,没有人查)。

大概就是先建出虚树(一般给定一堆关键点的题都是虚树),然后DP。

f[x]为处理掉x子树中所有关键点的最小花费,mn[x]  为从x到根的路径上的最小边权。

f[x]=min(mn[x],\sum f[son])

然后……没了。

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=5e5+50; 
const ll INF=1ll<<60;
int Log[MAXN],fa[MAXN][21],dfn[MAXN],dep[MAXN];
int stk[MAXN],a[MAXN],top,DFN=0;
ll mn[MAXN],f[MAXN];
struct enode{int to; ll c; };
vector<enode> e[MAXN];
vector<int> son[MAXN];inline int read()
{int x=0,f=1; char c=getchar();while (c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
void add_edge(int u,int v){ son[u].push_back(v); } 
void dfs(int x,int father)
{fa[x][0]=father;dep[x]=dep[father]+1;dfn[x]=++DFN;for (int i=1;i<=Log[dep[x]];i++) fa[x][i]=fa[fa[x][i-1]][i-1];for (int i=0;i<e[x].size();i++)if (e[x][i].to!=father){mn[e[x][i].to]=min(mn[x],e[x][i].c);dfs(e[x][i].to,x);}
}
int get_lca(int x,int y)
{if (dep[x]<dep[y]) swap(x,y);for (int i=Log[dep[x]];i>=0;i--)if (dep[fa[x][i]]>=dep[y]) x=fa[x][i];if (x==y) return x;for (int i=Log[dep[x]];i>=0;i--)if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];return fa[x][0];
}
void insert(int x)
{if (top==1) { stk[++top]=x; return; }int lca=get_lca(stk[top],x);if (lca==stk[top]) return;while (top>1&&dfn[stk[top-1]]>=dfn[lca]) add_edge(stk[top-1],stk[top]),top--;if (lca!=stk[top]) add_edge(lca,stk[top]),stk[top]=lca;stk[++top]=x;
}
ll tree_dp(int x)
{for (int i=0;i<son[x].size();i++) tree_dp(son[x][i]);f[x]=mn[x];if (!son[x].size()) return f[x];ll s=0;for (int i=0;i<son[x].size();i++) s+=f[son[x][i]];son[x].clear();return f[x]=min(f[x],s);
}
int compare(int x,int y){ return dfn[x]<dfn[y]; }
int main()
{int n=read();for (int i=1;i<n;i++){int u=read(),v=read(),c=read();e[u].push_back((enode){v,c});e[v].push_back((enode){u,c});}dep[0]=-1,Log[1]=0;for (int i=2;i<=n;i++) Log[i]=Log[i>>1]+1;for (int i=1;i<=n;i++) mn[i]=INF; dfs(1,0);//for (int i=1;i<=n;i++) cout<<i<<":"<<dep[i]<<" "<<dfn[i]<<" "<<mn[i]<<endl;int Case=read();while (Case--){int m=read();for (int i=1;i<=m;i++) a[i]=read();sort(a+1,a+m+1,compare);stk[top=1]=1;for (int i=1;i<=m;i++) insert(a[i]);while (top) add_edge(stk[top-1],stk[top]),top--;printf("%lld\n",tree_dp(1));}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Try.NET创建可交互.NET文档

原文地址&#xff1a;Create Interactive .NET Documentation with Try .NET[1] 原文作者&#xff1a;Maria 译文地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10894497.html 译者&#xff1a;Lamond Lu背景当我们编写开发人员使用的文档时&#xff0c;我们需要捕捉他们的…

Link-Cut Tree

Link-Cut Tree 概述. LCT是一种支持动态维护树上路径信息的数据结构&#xff0c;其本质是实链剖分&#xff0c;通过其他数据结构维护实链的信息达到维护路径及一些子树信息的效果&#xff08;通常为splay&#xff09; 刚开始学的时候感觉很难&#xff0c;但做过几道题了解套…

2021-2022ACM赛季小总结

最近一个月比赛月&#xff0c;做题量和频率太高&#xff0c;写博客浪费时间&#xff0c;所以一直没写。。 当前总结&#xff1a; CCPC桂林铜&#xff0c;银牌题线段树差一行调出&#xff0c;可惜又无奈&#xff0c;缺少运气 ICPC沈阳铜&#xff0c;银牌题的tarjan没想出来&…

ASP.NET Core模块化前后端分离快速开发框架介绍

源码地址GitHub&#xff1a;https://github.com/iamoldli/NetModular演示地址地址&#xff1a;http://118.24.75.170:6220/账户&#xff1a;admin密码&#xff1a;admin前端框架演示地址(临时)地址&#xff1a;http://progqx5cu.bkt.clouddn.com/skins/index.html#/账户&#x…

[POJ2888] Magic Bracelet

[POJ2888] Magic Bracelet 题目描述 简要题意&#xff1a;给圆上个点染色&#xff0c;颜色有种&#xff0c;其中对颜色不能相邻&#xff0c;循环同构&#xff0c;多组数据&#xff0c;询问染色方案数。 Solution 大概就是一道挺显然的Burnside题&#xff08;一般染色&#x…

手写编译器

假期没事想搞搞编译器&#xff0c;但学校课程未教过编译原理&#xff0c;自己只好在b站看了stanford的CS143《编译原理》&#xff0c;并结合相关资料&#xff0c;打算寒假期间自己手写一个简易的编译器 ReactjsbootStrap开发自制编译语言Monkey的编译器&#xff1a;创建简易的页…

使用命令行导出 SQL Server 数据层应用程序

点击上方蓝字关注“汪宇杰博客”我们可以使用 SSMS 导出 SQL Server 数据库的数据层应用程序。我在本地机器上使用这种方法已经有好几年了。如果不知道什么是 DAC&#xff0c;您可以参考 Microsoft 文档&#xff1a;https://docs.microsoft.com/en-us/sql/relational-databases…

Codeforces 1065 E. Side Transmutations

Codeforces 1065 E. Side Transmutations 题目描述 题意&#xff1a;一个字符串长度为&#xff0c;字符集大小为 &#xff0c;再给出种交换方式&#xff0c;表示可以交换。如果两个不同的串能够通过任意的交换方式得到相同的串&#xff0c;则视为相同&#xff0c;求方案数。…

P1 用reactjs和bootstrap创建页面IDE

文章目录页面IDE展示&#xff1a;要求&#xff1a;安装好Node.jsreactjs组件化开发页面IDE展示&#xff1a; 要求&#xff1a; 希望能够达到eclipse辅助编程的功能 关键字提醒&#xff0c;高亮 1&#xff0c; 有类似C语言的语法结构 2&#xff0c; 支持变量绑定 3&#xff0c;…

所以Apache基金会不受美国法律约束?

开源中国昨天发布的一篇文章《开源界也要注意&#xff0c;Apache 基金会与 GitHub 都受美国法律约束》引发了开源届乃至整个 IT 行业的热烈讨论&#xff0c;其中有个别声音认为文章的说法有误&#xff0c;甚至制造了恐慌。文中我们引用了两处内容&#xff0c;分别是 Apache 软件…

Loj#6485. LJJ 学二项式定理

Loj#6485. LJJ 学二项式定理&#xff08;单位根反演&#xff09; 题目描述 题目描述 题意&#xff1a;求下面式子的答案QAQ。 [∑((ni)⋅si⋅aimod4)]mod998244353[\sum(\tbinom{n}{i}\cdot s^i \cdot a_{i\;\;mod\;\;4}) ]\;mod\;\;998244353 [∑((in​)⋅si⋅aimod4​)]mod…

团体程序设计天梯赛-练习集

团体程序设计天梯赛-练习集 L2-001 紧急救援 (25 分) 知识点&#xff1a;最短路dij #include<bits/stdc.h> #define debug(x,y) printf("%s %d\n",x,y); typedef long long ll; using namespace std; inline int read(){int s0,w1;char chgetchar();while(…

C#中的Explicit和Implicit了解一下吧

今天在研究公司项目框架的时候看到了下面的用法&#xff0c;public static implicit operator JsonData(int data);。貌似很久没用过这种隐式转换的写法了&#xff0c;因此重新温习一下C#中转换相关的知识。作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com…

bzoj#2125. 最短路

bzoj#2125. 最短路 题目描述 Description 给一个N个点M条边的连通无向图&#xff0c;满足每条边最多属于一个环&#xff0c;有Q组询问&#xff0c;每次询问两点之间的最短路径。 Input 输入的第一行包含三个整数&#xff0c;分别表示N和M和Q 下接M行&#xff0c;每行三个整数v…

Dapper的正确使用姿势

本文demo适用于MySQL优点高性能、易排查、易运维、灵活可控缺点和EF相比&#xff0c;手写sql当修改表结构不易发现bug。习惯了EF后再来使用Dapper&#xff0c;会很难适应那种没有了强类型的安全感。不过可以用单元测和心细来避免。问题&#xff1a;IDbConnection需不需要手动Op…

P4064 [JXOI2017]加法

P4064 [JXOI2017]加法 题意&#xff1a; 题解&#xff1a; 要求找最小值尽可能大&#xff0c;很明显二分&#xff0c;现在是如何判断二分出来的答案的正确性 对于一个二分出来的答案mid&#xff0c;要求对k个区间进行操作后&#xff0c;最小值大于mid&#xff0c;我们可以这…

[NewLife.XCode]百亿级性能

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netcore&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0c;代…

LuoguP4606 [SDOI2018]战略游戏

LuoguP4606 [SDOI2018]战略游戏 题目描述 题目描述 省选临近&#xff0c;放飞自我的小 QQ 无心刷题&#xff0c;于是怂恿小 CC 和他一起颓废&#xff0c;玩起了一款战略游戏。 这款战略游戏的地图由 nn 个城市以及 mm 条连接这些城市的双向道路构成&#xff0c;并且从任意一个…

Jozky 刷题目录

文章目录本目录参考OI-Wiki还未解决专区算法基础枚举模拟递归&分治贪心排序前缀和&差分二分倍增构造搜索DFS && BFS双向搜索启发式搜索A*迭代加深搜索IDA*回溯法Dancing Links搜索优化&#xff08;剪枝&#xff09;动态规划普通dp背包dp区间dpDAG上的dp树形dp状…

Web API 速率限制(一)

导读当您API有大量消费者或者请求量猛增到影响程序可用性的时候&#xff0c;您可能需要对API进行速率限制。所以对API进行限速的在于&#xff1a;在增加可靠性和可用性的同时来保护基础架构&#xff0c;你不希望某个恶意的API消费者或者差劲的API客户端开发者通过Dos攻击把你的…