解题:NOIP 2018 保卫王国

题面

最小支配集=全集-最大独立集

所以先把点权改成正无穷/负无穷来保证强制选/不选某个点到独立集里,然后变成了洛谷的动态DP模板

GTMDNOIP2018ZTY

  1 #include<stack>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 const int N=100005,M=200005,inf=1e9;
  7 int siz[N],far[N],imp[N],top[N],lst[N];
  8 int p[N],noww[M],goal[M],val[N],dfn[N]; 
  9 int n,m,t1,t2,t3,t4,t5,t6,cnt,tot; 
 10 char typ[5]; long long sum;
 11 struct a
 12 {
 13     long long mat[2][2];
 14     void Clean()
 15     {
 16         memset(mat,0,sizeof mat);
 17     }
 18 }seg[4*N],tre[N];
 19 a Matime(a x,a y)
 20 {
 21     a ret; ret.Clean();
 22     for(int i=0;i<2;i++)
 23         for(int j=0;j<2;j++)
 24             for(int k=0;k<2;k++)
 25                 ret.mat[i][j]=max(ret.mat[i][j],x.mat[i][k]+y.mat[k][j]);
 26     return ret;
 27 }
 28 void Link(int f,int t)
 29 {
 30     noww[++cnt]=p[f];
 31     goal[cnt]=t,p[f]=cnt;
 32     noww[++cnt]=p[t];
 33     goal[cnt]=f,p[t]=cnt;
 34 }
 35 void DFS(int nde,int fth)
 36 {
 37     int tmp=0;
 38     siz[nde]=1,far[nde]=fth;
 39     for(int i=p[nde];i;i=noww[i])
 40         if(goal[i]!=fth)
 41         {
 42             DFS(goal[i],nde);
 43             siz[nde]+=siz[goal[i]];
 44             if(siz[goal[i]]>tmp)
 45                 tmp=siz[goal[i]],imp[nde]=goal[i];
 46         }
 47 }
 48 void Mark(int nde,int tpp)
 49 {
 50     dfn[nde]=++tot,top[nde]=tpp;
 51     if(imp[nde])
 52     {
 53         Mark(imp[nde],tpp);
 54         for(int i=p[nde];i;i=noww[i])
 55             if(goal[i]!=imp[nde]&&goal[i]!=far[nde])
 56                 Mark(goal[i],goal[i]);
 57     }
 58     lst[nde]=imp[nde]?lst[imp[nde]]:nde;
 59 }
 60 a Query(int nde,int l,int r,int ll,int rr)
 61 {
 62     if(l>=ll&&r<=rr)
 63         return seg[nde];
 64     else 
 65     {
 66         int mid=(l+r)/2,ls=2*nde,rs=2*nde+1;
 67         if(mid>=ll&&mid<rr)
 68             return Matime(Query(rs,mid+1,r,ll,rr),Query(ls,l,mid,ll,rr));
 69         if(mid>=rr) return Query(ls,l,mid,ll,rr);
 70         if(mid<ll) return Query(rs,mid+1,r,ll,rr);
 71     }
 72 }
 73 void Modify(int nde,int l,int r,int pos,a tsk)
 74 {
 75     if(l==r) seg[nde]=tsk;
 76     else
 77     {
 78         int mid=(l+r)/2,ls=2*nde,rs=2*nde+1;
 79         if(pos<=mid) Modify(ls,l,mid,pos,tsk);
 80         else Modify(rs,mid+1,r,pos,tsk);
 81         seg[nde]=Matime(seg[rs],seg[ls]);
 82     }
 83 }
 84 void Prework(int nde)
 85 {
 86     stack<int> st;
 87     for(int i=nde;i;i=imp[i]) st.push(i);
 88     while(!st.empty())
 89     {
 90         int tn=st.top(); st.pop();
 91         long long x=0,y=val[tn];
 92         for(int i=p[tn];i;i=noww[i])
 93             if(goal[i]!=imp[tn]&&goal[i]!=far[tn])
 94             {
 95                 Prework(goal[i]); a mtr=tre[goal[i]];
 96                 x+=max(mtr.mat[0][0],mtr.mat[0][1]),y+=mtr.mat[0][0];
 97             }
 98         a tmp; tmp.mat[0][0]=tmp.mat[1][0]=x,tmp.mat[0][1]=y,tmp.mat[1][1]=-inf;
 99         Modify(1,1,n,dfn[tn],tmp);
100     }
101     tre[nde]=Query(1,1,n,dfn[nde],dfn[lst[nde]]);
102 }
103 void Change(int nde,long long tsk)
104 {
105     a tmp=Query(1,1,n,dfn[nde],dfn[nde]);
106     tmp.mat[0][1]+=tsk-val[nde];
107     Modify(1,1,n,dfn[nde],tmp),val[nde]=tsk;
108     for(int i=top[nde];i!=1;i=top[i])
109     {
110         int fa=far[i];
111         a tmp=Query(1,1,n,dfn[fa],dfn[fa]),tep=Query(1,1,n,dfn[i],dfn[lst[i]]);
112         tmp.mat[0][0]+=max(tep.mat[0][0],tep.mat[0][1])-max(tre[i].mat[0][0],tre[i].mat[0][1]);
113         tmp.mat[0][1]+=tep.mat[0][0]-tre[i].mat[0][0],tmp.mat[1][0]=tmp.mat[0][0];
114         Modify(1,1,n,dfn[fa],tmp),tre[i]=tep,i=fa;
115     }
116 }
117 int main()
118 {
119     scanf("%d%d%s",&n,&m,typ);
120     for(int i=1;i<=n;i++)
121         scanf("%d",&val[i]),sum+=val[i];
122     for(int i=1;i<n;i++)
123         scanf("%d%d",&t1,&t2),Link(t1,t2);
124     DFS(1,0),Mark(1,1),Prework(1);
125     while(m--)
126     {
127         scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
128         if(!t2&&!t4&&(far[t1]==t3||far[t3]==t1))
129             printf("-1\n");
130         else 
131         {
132             t5=val[t1],t6=val[t3];
133             Change(t1,t2?-inf:inf);
134             Change(t3,t4?-inf:inf); 
135             a qry=Query(1,1,n,1,dfn[lst[1]]);
136             long long ans=sum-max(qry.mat[0][0],qry.mat[0][1]);
137             printf("%lld\n",ans+(inf-t5)*(t2^1)+(inf-t6)*(t4^1));
138             Change(t1,t5),Change(t3,t6);
139         }
140     }
141     return 0;
142 }
View Code

 

转载于:https://www.cnblogs.com/ydnhaha/p/10278280.html

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

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

相关文章

petshop4学习_重构DataList实现分页

掌握要点: <IList>,DataGrid翻页事件...详细代码如下,慢慢体会..usingSystem;usingSystem.Collections;usingSystem.Collections.Specialized;usingSystem.Text;usingSystem.Text.RegularExpressions;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;namespaceCustom…

如何与Java 8,NetBeans Platform 8,Jenkins,Jacoco和Sonar进行持续集成

介绍 Java 8出现了&#xff0c;人们所期待的革命终于发布了&#xff0c;我敢肯定&#xff0c;你们中的许多人都在想着同样的问题“我应该在项目中使用它吗&#xff1f;”。 好吧&#xff0c;几个月来我遇到了同样的问题&#xff0c;今天我有一个答案想与大家分享。 很多方面都…

WSS学习(一)---简单部署图

研究了一段时间的WSS&#xff0c;终于找到点头绪了今天把这段时间的思路整理了一下&#xff0c;结果发现就是这么一张图也不知道研究的对不对&#xff0c;有高手发现不对的给点指点有也在研究的大家一起讨论一下简单说明&#xff1a;数据库用SQL2005&#xff0c;报表用SQL2005的…

Wildfly 8.0通过其JAXRS 2.0实现提供了无缝的JSON支持。

很高兴看到Wildfly 8.0使得使用同一组JAXB类中的XML和JSON表示 两者变得更加容易&#xff0c;而无需任何额外的检查或配置不同的JAXB运行时实现。 您需要做的就是 只需从JAXRS资源类中的业务方法中返回JAXB对象 将HTTP Accept标头设置为application / json 返回JAXB类的简单…

vue.config.js配置别名alias、配置生产环境清除console

项目中使用引入文件有时候路径比较深&#xff0c;需要使用"../../../xx.js"这种类似的路劲引入&#xff0c;这种方式比较笨&#xff0c;可以使用webpack的别名alias配置来解决。 首先&#xff0c;先确定项目中是否有path模块&#xff1a; 如果没有path模块需要先安装…

借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

AssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具。 不幸的是直到最近&#xff0c;还不能一起使用它。 但是随后Java 8进入了游戏&#xff0c;几十行代码足以使其在Awaility 1.6.0中实现。 AssertJ提供了一组丰富的断言&#xff0c;其中包含非常有用的错误消息…

小程序-冒泡事件

小程序冒泡事件与非冒泡事件 会随之触发父元素的称为冒泡事件&#xff0c;反之&#xff0c;则是非冒泡事件 wxml&#xff1a; <view class"view1" bindtap"view1click"> <!-- 用 bind 绑定事件 -->view1<view class"view2" bin…

mysql导出表结构 创建_mysql如何导出表结构为文本文件

Log Goup ID&#xff0c;可能会配置多个redo组&#xff0c;每个组对应一个id&#xff0c;当前都是0&#xff0c;占用4字节Start LSN&#xff0c;这个redo log文件开始日志的lsn&#xff0c;占用8字节Log File Number&#xff0c;总是为0&#xff0c;占用4字节Created By&#x…

CSS基础学习-15-1.CSS 浏览器内核

转载于:https://www.cnblogs.com/songsongblue/p/11047935.html

gitlab提交代码push,触发jenkins构建

一、安装插件 Build Authorization TokenRoot Gitlab Hook Plugin二、配置 在linux上执行命令 openssl rand -hex 12获得token&#xff1a; 632f873225efdb5b7e5da411 去掉jenkins的 CSRF Protection设置 找到触发构建的项目&#xff0c;修改触发器 在gitlab的项目中&#xff0…

5分钟搞定jQuery zepto.js 面向对象插件

今天分享一下快速使用jQuery zepto.js的技巧&#xff0c;需要的记得收藏 1.jQuery的引入&#xff1a;本地下载jQuery(后面简称jq)的源文件&#xff0c;开发版本使用非min版&#xff0c;线上使用min版&#xff0c;zepto.js类似&#xff0c;同样的一些基于jq的插件也是如此用法&…

在JDK 8中可通过反射获得构造函数/方法参数元数据

JDK 8较不为人所知的一项新 功能是在编译的Java类中包含参数元数据的可选功能[JDK增强建议&#xff08; JEP &#xff09; 118 ]。 此功能允许Java应用程序在运行时通过反射访问此参数元数据信息。 Java Tutorial的Reflection API路径包括一个名为“ 获取方法参数的名称”的课…

基于面向对象的图片轮播(js原生代码)

无论你想走多远&#xff0c;你都需要不断地走下去。前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标&#xff0c;也提现这你的代码能力&#xff0c;开发的水平。废话不多说&#xff0c;进入今天的主要分享————基于面向对象思想的图片轮播。其效果如下所…

C#定义只能处理枚举类型的泛型类型

1 internal sealed class GenericTypeThatRequireAnEnum<T>2 {3 public static int age 12; //该 static 字段在不同的封闭类型之间是独立不共享的4 5 //静态构造器针对每个封闭类型都会执行一次&#xff0c;泛型类型定义静态构造器的目的就是为了保证传递的类…

Spring应用程序与JNDI连接池的集成测试

我们都知道&#xff0c;无论何时连接到数据库&#xff0c;都需要使用连接池。 所有使用JDBC 4类的现代驱动程序都支持它。 在本文中&#xff0c;我们将概述Spring应用程序中的连接池&#xff0c;以及如何在非JEE环境&#xff08;例如测试&#xff09;中处理相同的上下文。 在S…

在java web工程中jsp页面中使用kindeditor

在这之前我们用Notepad写过kindeditor 在Java web工程里也差不多 首先我们复制之前的thml代码粘贴到工程里 然后把样式也复制进去 然后就可以运行了 转载于:https://www.cnblogs.com/q2546/p/11066539.html

数据分析方法论

把零散的报表整成数据监控体系 把每次拍脑袋的评估整成数据考核体系 在推荐、广告等算法上有所突破&#xff0c;而不是自己瞎捣鼓个没人看的聚类分析 在推送响应等有业绩的地方产出产品&#xff0c;而不是每次用时间序列法预测个销量走势再被业务喷回来。 分析自己的现状&am…

Markdown的使用笔记

Markdown的使用笔记 Markdown在我看是一种使用几种标记符号就可以完成清晰排版的一种标记语言&#xff0c;是写笔记文章的一大利器&#xff0c;使用简单、方便&#xff0c;上手快&#xff0c;而且可以很好的兼容html&#xff0c;即html中的标签在markdown中也同样试用。这边文章…

多项式孤儿桶

巨佬制作人们大家好&#xff0c;我是练习多项式两周半的个人练习生lgl。这里总结一下多项式基本操作。 1.多项式加、减、输出 不说了。 时间复杂度$O(n)$。 2.多项式取模 已知多项式$F(x)$&#xff0c;求它对$x^n$取模。 人话&#xff1a;把$n$次及以上的系数清零。 时间复杂度…

python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天

Python OpenCV 365 天学习计划&#xff0c;与橡皮擦一起进入图像领域吧。基础知识铺垫在之前的博客中&#xff0c;我们获取图像直方图的方式都是获取一维直方图&#xff0c;简单说就是只获取一个通道的特征&#xff0c;例如灰度&#xff0c;B 通道&#xff0c;R 通道。今天要学…