P5024-保卫王国【动态dp,最小覆盖集】

正题

题目链接:https://www.luogu.org/problem/P5024


题目大意

一棵树,每次有要求
axby:a\ x\ b\ y:a x b y:表示aaa点是否必选和bbb点是否必选

然后每次求最小覆盖集。


解题思路

最小覆盖集=全集-最大独立集
所以我们每次必选不选就用+inf+inf+inf−inf-infinf处理即可
之后就是动态dp的模板了:
https://blog.csdn.net/Mr_wuyongcong/article/details/95033161

但貌似树剖最后一个点会被卡飞,吸口氧就莫得问题了(当然LCTLCTLCT也是没问题的)


codecodecode

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
%:pragma GCC optimize("-fgcse")
%:pragma GCC optimize("-fgcse-lm")
%:pragma GCC optimize("-fipa-sra")
%:pragma GCC optimize("-ftree-pre")
%:pragma GCC optimize("-ftree-vrp")
%:pragma GCC optimize("-fpeephole2")
%:pragma GCC optimize("-ffast-math")
%:pragma GCC optimize("-fsched-spec")
%:pragma GCC optimize("unroll-loops")
%:pragma GCC optimize("-falign-jumps")
%:pragma GCC optimize("-falign-loops")
%:pragma GCC optimize("-falign-labels")
%:pragma GCC optimize("-fdevirtualize")
%:pragma GCC optimize("-fcaller-saves")
%:pragma GCC optimize("-fcrossjumping")
%:pragma GCC optimize("-fthread-jumps")
%:pragma GCC optimize("-funroll-loops")
%:pragma GCC optimize("-fwhole-program")
%:pragma GCC optimize("-freorder-blocks")
%:pragma GCC optimize("-fschedule-insns")
%:pragma GCC optimize("inline-functions")
%:pragma GCC optimize("-ftree-tail-merge")
%:pragma GCC optimize("-fschedule-insns2")
%:pragma GCC optimize("-fstrict-aliasing")
%:pragma GCC optimize("-fstrict-overflow")
%:pragma GCC optimize("-falign-functions")
%:pragma GCC optimize("-fcse-skip-blocks")
%:pragma GCC optimize("-fcse-follow-jumps")
%:pragma GCC optimize("-fsched-interblock")
%:pragma GCC optimize("-fpartial-inlining")
%:pragma GCC optimize("no-stack-protector")
%:pragma GCC optimize("-freorder-functions")
%:pragma GCC optimize("-findirect-inlining")
%:pragma GCC optimize("-fhoist-adjacent-loads")
%:pragma GCC optimize("-frerun-cse-after-loop")
%:pragma GCC optimize("inline-small-functions")
%:pragma GCC optimize("-finline-small-functions")
%:pragma GCC optimize("-ftree-switch-conversion")
%:pragma GCC optimize("-foptimize-sibling-calls")
%:pragma GCC optimize("-fexpensive-optimizations")
%:pragma GCC optimize("-funsafe-loop-optimizations")
%:pragma GCC optimize("inline-functions-called-once")
%:pragma GCC optimize("-fdelete-null-pointer-checks")
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll Size=2,N=1e5+100,inf=(1ll<<60);
ll n,m,tot,cnt,ls[N],fa[N],v[N],f[N][2],sum;
ll seg[N],id[N],top[N],siz[N],son[N],ed[N];
struct matrix{ll a[Size][Size];
}val[N];
matrix operator*(matrix a,matrix b)
{matrix c;memset(c.a,0,sizeof(c.a));for(ll i=0;i<Size;i++)for(ll j=0;j<Size;j++)for(ll k=0;k<Size;k++)c.a[i][j]=max(c.a[i][j],a.a[i][k]+b.a[k][j]);return c;
}
struct Tree_node{ll l,r;matrix g;
};
struct Edge_node{ll to,next;
}a[N<<1];
struct Line_cut_tree{Tree_node t[N<<2];void Build(ll x,ll l,ll r){t[x].l=l;t[x].r=r;if(l==r){ll u=seg[l],g0=0,g1=v[seg[l]];for(ll i=ls[u];i;i=a[i].next){ll y=a[i].to;if(y==fa[u]||y==son[u]) continue;g0+=max(f[y][0],f[y][1]),g1+=f[y][0];}t[x].g.a[0][0]=t[x].g.a[0][1]=g0;t[x].g.a[1][0]=g1;val[l]=t[x].g;return;}ll mid=(l+r)/2;Build(x*2,l,mid);Build(x*2+1,mid+1,r);t[x].g=t[x*2].g*t[x*2+1].g;}matrix Query(ll x,ll l,ll r){if(t[x].l==l&&t[x].r==r)return t[x].g;if(t[x*2].r>=r) return Query(x*2,l,r);if(t[x*2+1].l<=l) return Query(x*2+1,l,r);return Query(x*2,l,t[x*2].r)*Query(x*2+1,t[x*2+1].l,r);}void Change(ll x,ll z){if(t[x].l==t[x].r){t[x].g=val[t[x].l];return;}if(t[x*2].r>=z) Change(x*2,z);else Change(x*2+1,z);t[x].g=t[x*2].g*t[x*2+1].g;}
}Tree;
void addl(ll x,ll y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs1(ll x,ll Fa)
{siz[x]++;fa[x]=Fa;f[x][1]=max(v[x],0ll);for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==Fa)continue;dfs1(y,x);f[x][0]+=max(f[y][0],f[y][1]);f[x][1]+=f[y][0];siz[x]+=siz[y];if(siz[y]>siz[son[x]]) son[x]=y;}
}
void dfs2(ll x,ll fa)
{id[x]=++cnt;seg[cnt]=x;if(son[x]){top[son[x]]=top[x];dfs2(son[x],x);}else ed[top[x]]=cnt;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa||y==son[x]) continue;top[y]=y;dfs2(y,x);}
}
matrix ask(ll x)
{return Tree.Query(1,id[top[x]],ed[top[x]]);}
void path_change(ll x,ll w)
{val[id[x]].a[1][0]+=w-v[x];v[x]=w;matrix old,news;while(x){old=ask(top[x]);Tree.Change(1,id[x]);news=ask(top[x]);x=fa[top[x]];val[id[x]].a[0][0]+=max(news.a[0][0],news.a[1][0])-max(old.a[0][0],old.a[1][0]);val[id[x]].a[0][1]=val[id[x]].a[0][0];val[id[x]].a[1][0]+=news.a[0][0]-old.a[0][0];}
}
int main()
{char rubbish[3];scanf("%lld%lld%s",&n,&m,rubbish);for(ll i=1;i<=n;i++)scanf("%lld",&v[i]),sum+=v[i];for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}top[1]=1;dfs1(1,0);dfs2(1,0);Tree.Build(1,1,n);matrix ans;while(m--){ll a,x,b,y;scanf("%lld%lld%lld%lld",&a,&x,&b,&y);if(!x) path_change(a,v[a]+inf);else path_change(a,v[a]-inf);if(!y) v[b],path_change(b,v[b]+inf);else path_change(b,v[b]-inf);sum+=((x^1)+(y^1))*inf;ans=ask(1);ll answer=sum-max(ans.a[0][0],ans.a[1][0]);if(answer>inf) printf("-1\n");else printf("%lld\n",answer);if(!x) path_change(a,v[a]-inf);else path_change(a,v[a]+inf);if(!y) v[b],path_change(b,v[b]-inf);else path_change(b,v[b]+inf);sum-=((x^1)+(y^1))*inf;}
}

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

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

相关文章

Dubbo(三)之Spring zookeeper集成

转载自 Dubbo快速开始 Dubbo 采用全 Spring 配置方式&#xff0c;透明化接入应用&#xff0c;对应用没有任何 API 侵入&#xff0c;只需用 Spring 加载 Dubbo 的配置即可&#xff0c;Dubbo 基于 Spring 的 Schema 扩展 进行加载。 如果不想使用 Spring 配置&#xff0c;可以…

浅谈开发模式及架构发展

一、传统开发模式传统的开发模式基本一般是重服务端的开发方式&#xff0c;大部分工作都在服务端执行&#xff0c;然后返回到客户端&#xff08;通常是HTML&#xff09;。以Asp.net MVC为例&#xff0c;如下图&#xff1a;#1 根据请求的路由定位到对应的Controller的对应的Acti…

P1613-跑路【Floyd,倍增】

正题 题目链接:https://www.luogu.org/problem/P1613 题目大意 询问111到nnn的路径&#xff0c;每次可以走2n2^n2n条边&#xff0c;求最少次数(可以重复)。 解题思路 定义geti,j,tget_{i,j,t}geti,j,t​表示iii到jjj是否有2t2^t2t的路径。 然后geti,j,tgeti,k,t−1&amp;…

Dubbo(四)之xml配置方式

转载自 Dubbo xml配置方式 以 XML 配置的方式来配置你的 Dubbo 应用 有关 XML 的详细配置项&#xff0c;请参见&#xff1a;配置参考手册。如果不想使用 Spring 配置&#xff0c;而希望通过 API 的方式进行调用&#xff0c;请参见&#xff1a;API配置。想知道如何使用配置&a…

Actor-ES框架:Ray-Handler之CoreHandler编写

如图右上角所示&#xff0c;Ray中有两类Handler&#xff08;SubHandler和PartSubHandler&#xff09;,在使用中&#xff0c;SubHandler派生Actor的CoreHandler&#xff0c;PartSubHandler派生SQLToReadHandler&#xff0c;SQLToReadHandler派生Actor的ToReadHandler&#xff0c…

Dubbo(五)之动态配置中心

转载自 Dubbo动态配置中心 Dubbo 2.7 中的动态配置中心 配置中心&#xff08;v2.7.0&#xff09;在 Dubbo 中承担两个职责&#xff1a; 外部化配置。启动配置的集中式存储 &#xff08;简单理解为 dubbo.properties 的外部化存储&#xff09;。服务治理。服务治理规则的存储…

P4503-[CTSC2014]企鹅QQ【字符串hash】

题目大意 给出nnn个长度为lll且互不相同的串&#xff0c;若两个串只有一个字符不相同那么这两个串相似。 求有多少对相似的串。 解题思路 我们可以枚举不相似的位&#xff0c;然后我们考虑字符串hashhashhash 然后我们可以将删掉了一位的字符串拆分为由[1..k−1][1..k-1][1…

nssl1335-蛋糕切割【数论,GCD】

正题 题目大意 n∗mn*mn∗m的矩阵&#xff0c;求对角线经过多少个格子(经过格子内部才算)。 解题思路 FromZYCdalaoFrom\ ZYCdalaoFrom ZYCdalao的思路:::对于若(n,m)1(n,m)1(n,m)1(互质)则会经过nm−1nm-1nm−1个格子&#xff0c;所以我们可以将n∗mn*mn∗m拆分成gcd(n,m)gcd(…

使用Mono将C#编译运行至WebAssembly平台

因为所有的主流网页浏览器都支持WebAssembly&#xff0c;开发者们现在可以寻找一个新的平台来部署他们的应用程序。由WebAssembly团队提供的标准工具链仅能将C、C编译成为WebAssembly&#xff0c;然而这对使用其他编程语言的开发者们并没有什么帮助。C#开发者就幸运的多了&…

Dubbo(六)之属性配置

转载自 Dubbo属性配置 属性配置 以属性配置的方式来配置你的 Dubbo 应用 如果你的应用足够简单&#xff0c;例如&#xff0c;不需要多注册中心或多协议&#xff0c;并且需要在spring容器中共享配置&#xff0c;那么&#xff0c;我们可以直接使用 dubbo.properties 作为默认…

nssl1336-膜拜神牛【LIS】

正题 题目大意 序列AAA和序列BBB。一个子集SSS使得不存在 Ax≥Ay&amp;Bx≤By(x,y∈S)A_x\geq A_y\ \&amp;\ B_x\leq B_y(x,y\in S)Ax​≥Ay​ & Bx​≤By​(x,y∈S) 求子集最大大小 解题思路 很显然我们可以先排序然后变成LISLISLIS问题。 先按照AAA为第一关键字…

使用Docker分分钟启动常用应用

前言Docker是目前比较火的一个概念&#xff0c;同时也是微服务中比较关键的一个容器化技术。但是&#xff0c;单从理论上好难看出Docker的优势&#xff0c;因此&#xff0c;我希望在这篇文章中提供一些Docker的使用示例&#xff0c;希望从实际应用上帮助大家理解Docker的优势&a…

Dubbo(七)之自动加载环境变量

转载自 自动加载环境变量 在 Dubbo 中自动加载环境变量 从 2.7.3 版本开始&#xff0c;Dubbo 会自动从约定 key 中读取配置&#xff0c;并将配置以 Key-Value 的形式写入到URL中。 支持的 key 有以下两个&#xff1a; dubbo.labels&#xff0c;指定一些列配置到 URL 中的键…

nssl1337-矩形统计【单调栈】

正题 题目大意 一个n∗nn*nn∗n的矩阵&#xff0c;然后有些位置破损。求可以剪出多少个不破损的矩形。 解题思路 预处理upi,jup_{i,j}upi,j​表示从(i,j)(i,j)(i,j)向上多少格子都是非破损格子。 然后我们枚举下界LowLowLow&#xff0c;将图像变成一个下部平整的条形图&…

TypeScript 2.7 版本发布

TypeScript 2.7版本已经发布了&#xff0c;新增了几个主要功能特性并进行了一些bug的修正。其中一些亮点包括对类属性的赋值检查、固定长度的元组和改进对象文字的类型推断。总的来说&#xff0c;这个版本对类型系统、ES2015特性和总体的TypeScript开发者体验都进行了改进优化。…

Dubbo(八)之API 配置

转载自 DubboAPI 配置 以API 配置的方式来配置你的 Dubbo 应用 API 属性与配置项一对一&#xff0c;各属性含义&#xff0c;请参见&#xff1a;配置参考手册&#xff0c;比如&#xff1a;ApplicationConfig.setName("xxx") 对应 <dubbo:application name"…

nssl1338-逃亡路径【最短路计数,bfs】

正题 题目大意 n∗mn*mn∗m的格子&#xff0c;一个走"日"字形的马&#xff0c;从(1,1)(1,1)(1,1)走到(n,m)(n,m)(n,m)的最短路条数。 解题思路 模板最短路计数改一下即可 当然因为边权都为1所以这里改成了bfsbfsbfs codecodecode #include<cstdio> #include&…

Azure Functions + Azure Batch实现MP3音频转码方案

客户需求客户的环境是一个网络音乐播放系统&#xff0c;根据网络情况提供给手机用户收听各种码率的MP3歌曲&#xff0c;在客户没购买歌曲的情况下提供一个三十秒内的试听版本。这样一个系统非常明确地一个需求就是会定期需要将一批从音乐版商手中获取到的高比特率音乐文件转换成…

Springboot Mybatis多数据源配置MybatisProperties坑

一、场景复现 配置了两个数据源&#xff0c;查询Dao却报错表不存在。 &#xff08;1&#xff09;maven <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId> </dependency> …

nssl1351-矩形反色【离散,差分】

正题 题目大意 对一个全白矩阵每次选择一个矩阵颜色取反。 然后求最后所有黑色联通块的周长之和。 解题思路 因为是算周长&#xff0c;所以我们将一个矩阵拆分成4条边&#xff0c;然后将横竖分开处理。 若处理横的边&#xff0c;我们按照xxx为关键字排序。 然后对于xxx不同…