bzoj 3611

 

和BZOJ消耗站一样,先将那个询问的简图构建出来,然后就是简单的树形DP。

(倍增数组开小了,然后就狂WA,自己生成的极限数据深度又没有那么高,链又奇迹般正确)

 

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <vector>
  4 #include <algorithm>
  5 #define min(a,b) ((a)<(b)?(a):(b))
  6 #define max(a,b) ((a)>(b)?(a):(b))
  7 #define oo 0x3f3f3f3f3f3f3f3f
  8 #define N 1000010
  9 #define P 19
 10 using namespace std;
 11 
 12 typedef long long dnt;
 13 
 14 int n, m;
 15 vector<int> g[N];
 16 int dfn[N], anc[N][P+1], dep[N], idc;
 17 int head[N], ikey[N], dest[N+N], next[N+N], etot;
 18 dnt dp[N][4]; 
 19 int qcnt, aa[N], stk[N], top;
 20 dnt ans[3];
 21 
 22 void adde( int u, int v ) {
 23     etot++;
 24     next[etot] = head[u];
 25     dest[etot] = v;
 26     head[u] = etot;
 27 }
 28 void dfs( int u ) {
 29     dfn[u] = ++idc;
 30     for( int p=1; p<=P; p++ )
 31         anc[u][p] = anc[anc[u][p-1]][p-1];
 32     for( int t=0; t<g[u].size(); t++ ) {
 33         int v=g[u][t];
 34         if( v==anc[u][0] ) continue;
 35         anc[v][0] = u;
 36         dep[v] = dep[u]+1;
 37         dfs(v);
 38     }
 39 }
 40 bool cmp( int u, int v ) {
 41     return dfn[u]<dfn[v];
 42 }
 43 int lca( int u, int v ) {
 44     if( dep[u]<dep[v] ) swap(u,v);
 45     int t=dep[u]-dep[v];
 46     for( int p=0; t; t>>=1,p++ )
 47         if( t&1 ) u=anc[u][p];
 48     if( u==v ) return u;
 49     for( int p=P; p>=0 && anc[u][0]!=anc[v][0]; p-- )
 50         if( anc[u][p]!=anc[v][p] ) u=anc[u][p], v=anc[v][p];
 51     return anc[u][0];
 52 }
 53 void build() {
 54     stk[top=1] = 1;
 55     head[1] = 0;
 56 
 57     sort( aa+1, aa+1+qcnt, cmp );
 58 
 59     etot = 0;
 60     for( int i=2-(aa[1]!=1); i<=qcnt; i++ ) {
 61         int ca=lca(aa[i],stk[top]);
 62         while( dep[ca]<dep[stk[top]] ) {
 63             int u;
 64             u = stk[top--];
 65             if( dep[ca]>=dep[stk[top]] ) {
 66                 if( ca!=stk[top] ) {
 67                     stk[++top] = ca;
 68                     head[ca] = 0;
 69                 }
 70                 adde( stk[top], u );
 71                 break;
 72             } 
 73             adde( stk[top], u );
 74         }
 75         stk[++top] = aa[i];
 76         head[aa[i]] = 0;
 77     }
 78     for( int i=top; i>=2; i-- )
 79         adde( stk[i-1], stk[i] );
 80 }
 81 dnt sml, big, sum, cnt;
 82 void dodp( int u ) {
 83     if( ikey[u] ) {
 84         dp[u][0] = 0;
 85         dp[u][1] = 0;
 86         dp[u][2] = 1;
 87         dp[u][3] = 0;
 88     } else {
 89         dp[u][0] = oo;
 90         dp[u][1] = -oo;
 91         dp[u][2] = 0;
 92         dp[u][3] = 0;
 93     }
 94     for( int t=head[u]; t; t=next[t] ) {
 95         int v=dest[t]; 
 96         dnt w=dep[v]-dep[u];
 97         dodp(v);
 98         dp[u][0] = min( dp[u][0], dp[v][0]+w );
 99         dp[u][1] = max( dp[u][1], dp[v][1]+w );
100         dp[u][2] += dp[v][2];
101         dp[u][3] += dp[v][3]+w*dp[v][2];
102     }
103     if( ikey[u] ) {
104         sml = 0;
105         big = 0;
106         sum = 0;
107         cnt = 1;
108     } else {
109         sml = oo;
110         big = -oo;
111         sum = 0;
112         cnt = 0;
113     }
114     for( int t=head[u]; t; t=next[t] ) {
115         int v=dest[t]; 
116         dnt w=dep[v]-dep[u];
117         ans[0] = min( ans[0], sml+w+dp[v][0] );
118         ans[1] = max( ans[1], big+w+dp[v][1] );
119         ans[2] += cnt*(dp[v][3]+w*dp[v][2]) + sum*dp[v][2];
120         sml = min( sml, dp[v][0]+w );
121         big = max( big, dp[v][1]+w );
122         cnt += dp[v][2];
123         sum += dp[v][3]+w*dp[v][2];
124     }
125 }
126 int main() {
127     scanf( "%d", &n );
128     for( int i=1,u,v; i<n; i++ ) {
129         scanf( "%d%d", &u, &v );
130         g[u].push_back( v );
131         g[v].push_back( u );
132     }
133     anc[1][0] = 1;
134     dep[1] = 0;
135     dfs(1);
136     scanf( "%d", &m );
137     for( int i=1; i<=m; i++ ) {
138         scanf( "%d", &qcnt );
139         for( int j=1; j<=qcnt; j++ )
140             scanf( "%d", aa+j );
141 
142         if( qcnt==1 ) {
143             printf( "0 0 0\n" );
144             continue;
145         }
146 
147         build();
148 
149         for( int j=1; j<=qcnt; j++ )
150             ikey[aa[j]] = 1;
151         ans[0] = oo;
152         ans[1] = 0;
153         ans[2] = 0;
154         dodp(1);
155         for( int j=1; j<=qcnt; j++ )
156             ikey[aa[j]] = 0;
157 
158         printf( "%lld %lld %lld\n", ans[2], ans[0], ans[1] );
159     }
160 }
View Code

 

转载于:https://www.cnblogs.com/idy002/p/4394525.html

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

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

相关文章

vscode添加源文件_VSCode自制的IDE编译多个源文件

文/EdwardVSCode的预定义变量我们上一篇文章中讲述了如何将MinGW工具嵌入到VSCode文本编辑器中&#xff0c;在这个配置的过程中&#xff0c;我们只需要通过修改VSCode生成的“luanch.json”和“task.json”两个JSON文件中的特定字段&#xff0c;就可以实现开发环境的搭建。那么…

mysql+自动还原备份_Mysql 自动备份与恢复

自动备份MySql 5.0有三个方案&#xff1a;备份方案一&#xff1a; 通过 mysqldump命令,直接生成一个完整的 .sql 文件Step 1: 创建一个批处理(说明&#xff1a;root 是mysql默认用户名, aaaaaa 是mysql密码, bugtracker 是数据库名)------------mySql_backup.bat--------------…

Web Service 学习

1. Web services 平台的元素&#xff1a; SOAP (简易对象访问协议) UDDI (通用描述、发现及整合) WSDL (Web services 描述语言)1.1 什么是 SOAP&#xff1f; 基本的 Web services 平台是 XML HTTP。 SOAP 指简易对象访问协议 SOAP 是一种通信协议 SOAP 用于应用程序之间的通信…

mysql事务所_mysql事务

1.事务的ACID属性事务(Database Transaction) &#xff0c;是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元&…

Swift 操作符

这里只记录一些swift特殊的运算符 1.swift里面 仅仅进行赋值操作&#xff0c;不再向右边返回左值 2.模运算的操作数可以是小数了 3.Nil Coalescing Operator nil coalescing operator用来判断一个可选值是否有值&#xff0c;如果没有的话就赋予其一个缺省值 注意这里面“&…

netty java_Netty框架学习及第一个Netty应用

编辑推荐:本文来自于csdn,文章主要介绍了Netty的基础&#xff0c;有什么特点&#xff0c;其构成部分是什么&#xff0c;以及相关的应用。1.什么是Netty&#xff1f;Netty是一个利用Java的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框…

webdriver 爬虫 java_java爬虫通过selenium+WebDriver遍历页面链接报错

背景由于要爬取的页面&#xff0c;每个链接的请求都是点击之后js动态发起的&#xff0c;目标数据也多是js动态生成的&#xff0c;所以使用selenium工具webdriver(调试用的是chrome&#xff0c;具体使用准备用phantomjs).模拟登录之后&#xff0c;模拟查询之后&#xff0c;得到如…

XmlDocument类

XmlDocument类是.NET框架的DOC解析器。XmlDocument将XML视为树状结构&#xff0c;它装载XML文档&#xff0c;并在内存中构建该文档的树状结构。下面来看下XmlDocument提供了哪些功能。 一、属性&#xff1a; Attributes      获取一个 XmlAttributeCollection&#xff0c…

java类作用域标识符_java入门 (二) 标识符、数据类型、类型转换、变量、常量、作用域...

java入门(二)标识符数据类型类型转换变量、常量、作用域本次笔记引用B站&#xff1a;狂神说,虽然早就会了&#xff0c;现在回头来敲下基础&#xff0c;加深印象1.标识符&#xff1a;java所有的组成部分都需要名字。类名丶变量名丶方法名统称为标识符。标识符大小写敏感。不能使…

0421 AutoLayout的实践/基本使用

历史:从iOS 6开始 ,之前都是3.5英寸没有考虑到适配.iPhone5 变成了4英寸,所以推出了Auto Layout理解: 另外一个体系,去描述位置.像素:点: // 勘误: 图中的像素应为 “点"// 写上以上代码,就可以删掉系统创建的控制器和storyBoard了.// 创建控制器,勾选Xib[]拖一个uiview背…

java 圆形按钮,如何在Java中创建圆形的JButton?

I want to create rounded JButton in Java...For that I use rounded image and placed that image on button but I didnt get rounded button..please any one can tell how to create rounded button in Java like show in below figure..thanks in advance.....解决方案If…

Python学习 Day 3 字符串 编码 list tuple 循环 dict set

字符串和编码 字符 ASCII Unicode UTF-8 A 1000001 00000000 01000001 1000001 中 x 01001110 00101101 11100100 10111000 10101101 格式化 在Python中&#xff0c;采用的格式化方式和C语言是一致的&#xff0c;用%实现&#xff0c;举例如下&#xff1a; >>&…

java 高飞_高飞(土木与水利工程学院)老师 - 合肥工业大学

高飞高飞老师的简历姓名:高飞 性别:男 出生年月:1962.11最终学位:硕士 毕业院校:合肥工业大学职称:教授 职务:副院长电话:0551-2901441,13705510744E-mail:gaofeihfut.edu.cn现从事专业:测绘科学与技术社会团体任职:1.全国高等学校测绘学科教学指导委员会,委员;2.中国测绘学会工…

jwPlayer为js预留的回调方法

参考地址&#xff1a;http://www.cnblogs.com/lori/archive/2014/05/05/3709459.html 应用场合 播放时记录当前视频的时间&#xff0c;播放完成时写入完成的时间&#xff0c;像这些功能&#xff0c;我们都可以通过事件回调的方法解决&#xff0c;即为events属性赋相应的值&…

java list 分组_Java 将List中的实体类按照某个字段进行分组并存

1、JDK1.8之前&#xff1a;假设有实体类User&#xff0c;里面有字段id&#xff0c;我们将相同id的User进行分组&#xff0c;并存放在Map中。(例子不是很恰当&#xff0c;但很能说明问题)public static void main(String[] args) {List list new ArrayList<>();list.add(…

UVa 11481 (计数) Arrange the Numbers

居然没有往错排公式那去想&#xff0c;真是太弱了。 先在前m个数中挑出k个位置不变的数&#xff0c;有C(m, k)种方案&#xff0c;然后枚举后面n-m个位置不变的数的个数i&#xff0c;剩下的n-k-i个数就是错排了。 所以这里要递推一个组合数和错排数。 顺便再复习一下错排递推公式…

java httpclient 关闭_【Java系列007】HttpClient调用:你考虑过关闭连接、并发了吗?...

你好&#xff01;我是miniluo&#xff0c;今天和你分享使用HttpClient过程中&#xff0c;未考虑释放连接和并发导致的坑。HttpClient在项目中还是比较常见的&#xff0c;主要都是通过GET或POST请求第三方以获取响应结果。前段时间还了解到也有企业用它来做爬虫。下面我们就从两…

UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I

I - 秋实大哥下棋 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status胜负胸中料已明&#xff0c;又从堂上出奇兵。秋实大哥是一个下棋好手&#xff0c;独孤求败的他觉得下棋已经无法满足他了&#xff0c;他开始研究一种新的…

java 6大原则_java 6大设计原则 一:观察者模式

解耦常用的模式OrderService.javaServicepublic class OrderService{AutowiredApplicationContext applicationContext ;public void saveOrder(){//1.创建订单System.out.println(“1.创建订单”)&#xff1b;OrderEvent event new OrderEvent("参数")application…

jbb是什么梗_子水是什么意思,子水命理

子水是十二地支之一&#xff0c;那么命中有子水的代表的是什么呢&#xff1f;适合什么方位呢&#xff1f;有什么喜忌吗&#xff1f;怎么分析你呢?现在金宝贝起名网为你介绍子水是什么意思,子水命理的相关文章。子水是什么意思,子水命理八字地支&#xff1a;子水是什么意思1、对…