解题: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;今天我有一个答案想与大家分享。 很多方面都…

mysql max datetime_MYSQL在联接语句中选择MAX日期

我正在尝试返回记录编号的历史位置我所拥有的是&#xff1a;SELECT l.location, t.transaction_id, t.date_modifiedFROM transactions as tINNER JOIN (SELECTt1.received_id, t1.transaction_id, t1.date_modifiedFROM (SELECT received_id, MAX(date_modified) as maxmodify…

pxe远程装机

1&#xff1a;主机 yum install dhcp vim /etc/dhcp/dhcpd.conf allow booting;      allow bootp;      ddns-update-style interim;      ignore client-updates;      subnet 192.168.10.0 netmask 255.255.255.0 {      option subnet-mask …

模板引擎

模板引擎是用来渲染页面的。页面中一部分内容是根据程序生成的&#xff0c;会变化的。 主流的模板引擎有两种&#xff1a; * jade 破坏式的、强依赖的 用了它就不能用html。 * ejs 非侵入式的、比较温和。 并不破坏原有的html 、 css(其实是往里面加入东西。) jade 根据…

Learning ROS: rqt_console和rqt_logger_level使用

rqt_console&#xff1a;操作、查看log信息 rqt_logger_level&#xff1a;设置log等级 打开node&#xff1a; rosrun rqt_console rqt_console rosrun rqt_logger_level rqt_logger_level rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key 在rqt_logger_le…

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类的简单…

mysql order by int_mysql order by是怎么工作的?

假设我们要查询一个市民表中城市杭州的所有人的名字&#xff0c;并且按照名字排序CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city)) ENGINE…

URL模块之parse方法

url.parse(urlString , boolean , boolean) parse这个方法可以将一个url的字符串解析并返回一个url的对象。 参数&#xff1a; urlString指传入一个url地址的字符串第二个参数&#xff08;可省&#xff09;传入一个布尔值&#xff0c;默认为false&#xff0c;为true时&#x…

git使用学习笔记

## 关于Git Workspace&#xff1a;工作区 Index / Stage&#xff1a;暂存区 Repository&#xff1a;仓库区&#xff08;或本地仓库&#xff09; Remote&#xff1a;远程仓库##一、新建代码库# 在当前目录新建一个Git代码库$ git init # 新建一个目录&#xff0c;将其初始化为Gi…

over(partition by)开窗函数的使用

开窗函数是分析函数中的一种&#xff0c;开窗函数与聚合函数的区别是&#xff1a;开窗函数是用于计算基于组的某种聚合值且每个的组的聚合计算结果可以有多行&#xff0c;而聚合函数每个组的聚合计算结果只有一个。使用开窗函数可以在没有group by语句的情况下计算聚合值并将结…

发配边疆

这次要去清朝发家的地方&#xff0c;宣统皇帝待过的长春城一去&#xff0c;怕要2个年头才能回来了&#xff01;朋友们临行前给我发了许多有趣的东东感觉颇深&#xff0c;明天发上来纪念下。有帮朋友的感觉真的很好啊&#xff01;今天和女友通电话了&#xff0c;忽然有了从前的那…

在Java EE 7和WildFly中使用Bean验证来验证JAX-RS资源数据

我过去已经两次接触过这个主题。 首先&#xff0c;在我的文章《 在Java EE 6中将Bean验证与JAX-RS集成》中 &#xff0c;介绍了甚至在Java EE平台规范中未定义之前&#xff0c;如何在JBoss AS 7中将Bean验证与JAX-RS结合使用的方法。 后来&#xff0c;在一篇为《 JAX Magazine …

EventUtil.addHandler方法

EventUtil.addHandler&#xff1a;addHandler 方法&#xff0c;职责是分别视情况而定来使用DOM0级方法、DOM2级方法或IE方法来添加事件。 这个方法属于一个名字叫EventUtil的对象&#xff0c;可以使用这个对象来处理浏览器间的差异。     addHandler() 方法…

Linux scp 指令

scp指令可从远程服务器下载文件或上传文件至远程服务器(适用于: mac没安装ftp软件临时使用) 上传: scp 本地文件路径 rootIP:远程路径 例: scp /Users/xxx/Downloads/email.png rootxxx.xxx.xxx.xx:/root/img 下载:scp rootxxx.xxx.xxx.xx:/root/img/email.png /Users/xxx/Down…

mysql游标遍历数据库_MySQL数据库中,使用游标循环遍历_MySQL

/*对*dt库下的所有数据表删除docuemttype为空和documenttype为MD,PD,ET的数据&#xff1a;delete from 表名 where length(documenttype)<2 or documenttype is null or documenttype in (et,md,pd);*/DELIMITER $$USE 数据库名称1$$DROP PROCEDURE IF EXISTS 存储过程名称1…

RN启动报错,环境相关问题

启动RN的时候刚开始报错&#xff1a; The request was denied by service delegate (SBMainWorkspace) for reason: Security ("Entitlement "com.apple.frontboard.debugapplications" required to launch applications for debugging"). 查询网络上的解决…

在Spring MVC Web应用程序中添加社交登录:集成测试

我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战&#xff0c;并为此提供了一种解决方案 。 尽管单元测试很有价值&#xff0c;但是它并不能真正告诉我们我们的应用程序是否正常运行。 这就是为什么我们必须为此编写集成测试的原因 。 这篇博客文章可以…

js基本包装类型和引用类型

回顾 1.什么是基本类型&#xff1f; 共5个。boolean,string,number,null,undefined. 2.什么是引用类型&#xff1f; 引用类型的值是对象&#xff0c;保存在堆内存中&#xff1b; 引用类型的变量实际上是一个指针&#xff0c;它保存在栈中&#xff0c;指向堆内存中的对象&am…