Wannafly模拟赛2 C alliances(dfs序+二分)
题目
https://www.nowcoder.com/acm/contest/4/C
题意
由n个点组成一个树,有m个帮派,每个帮派由一些个点组成,这些点以及它们两两路径上的所有点都属于该帮派的管辖范围;
有q个询问 v {S} ,表示现在{S}中的帮派联合起来,它们所有点对的两两路径上的所有点都属于该联盟的管辖范围,回答从v点到管辖范围点的最短距离
n<=5e5,m<=5e5,q<=5e5
分析
首先来考虑只有一个帮派,并不形成联盟的情况,假设我们要询问v点和这个帮派管辖点之间的最短的距离
这些点形成的管辖区域一定是以它们共同lca为根的一个树(是lca子树的一部分)
我们来考虑v点和这个树的关系
1)如果v点在以lca为根的子树外面,即dfn[v]<dfn[lca]或者dfn[v]>rtime[lca],这样容易发现此时的距离就是dist(v,lca)
2)如果v点在以lca为根的子树里面,那这时我们可以将这些点按照dfs序进行排序,然后将dfn[v]在排序结果中lower_bound找到dfs序离v最近的两个点x,y,那么结果就是$min(dist(v,lca(v,x)),dist(v,lca(v,y)))$
现在再来考虑联盟的情况
实际上,我们可以将每个帮派的管辖情况都缩成一个点,那么实际上这些帮派代表点形成一个新的“总帮派”,我们只需要在这个总帮派上进行我们之前同样的操作就ok了
其实并不需要真正的缩点,容易发现对于一个帮派里所有点,任意选一个做为代表点,都不会影响结果,所以只需要任意挑出一个代表点就行了
这题n有5e5,如果直接dfs建图会爆栈,需要手写
Wannafly模拟赛2 C alliances(dfs序+二分)的更多相关文章
- [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...
- 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)
传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...
- 牛客 4C Alliances (dfs序)
大意: 给定树, 有$k$个帮派, 第$i$个帮派所占据点为$c_i$, 以及$c_i$两两相连路径上的所有点. 一个点可能被多个帮派占领. $q$个询问, 第$i$个询问给定$t_i$个帮派, 给定 ...
- CodeForces 570D - Tree Requests - [DFS序+二分]
题目链接:https://codeforces.com/problemset/problem/570/D 题解: 这种题,基本上容易想到DFS序. 然后,我们如果再把所有节点分层存下来,那么显然可以根 ...
- 7.9 NOI模拟赛 A.图 构造 dfs树 二分图
啥都想不出来的我是不是废了/dk 这道题考的主要是构造 而我想的主要是乱搞. 一个很假很假的做法:直接暴力4种颜色染色 我也不知道对不对.. 不过成功的话一定是对的. 然后考虑奇环的问题 一个很假很假 ...
- Wannafly模拟赛5 A Split 暴力 二分加速
你有一个大小为
- Wannafly模拟赛 A.矩阵(二分答案+hash)
矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两 ...
- Wannafly模拟赛
题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两个整数n, m代表矩阵的长和宽: 接下来n行,每 ...
- Wannafly模拟赛3
喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点 反蝴蝶效应 时间限制:1秒 空间限制:65536K 题目描述 一只南美洲亚马孙河流域热带雨林中的蝴蝶,偶尔扇动 ...
随机推荐
- centos开机直接进入命令行
找到文件,/etc/inittab 文件,在下面有一行 id:5:initdefault: 将上面的5改成3就可以了 5是图形界面 3是命令行界面 就是文本界面.
- 洛谷 P1030 求先序排列
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...
- iview modal 点击打开窗口,打开前先销毁里面的内容再打开
<Modal v-model="addSubOrgModal" @on-cancel="addSubOrgCancel" @on-visible-chan ...
- Qt 之 QApplication
1.QApplication QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结 ...
- node.js中使用Redis
服务端: 启动Redis服务: redis-server 客户端: 1.安装Redis npm install redis --save 2.redisTest.js文件 //引入red ...
- resnet.caffemodel
http://blog.csdn.net/baidu_24281959/article/details/53203757
- CPP-基础:关于私有成员的访问
a.C++的类的成员函数中,允许直接访问该类的对象的私有成员变量. b.在类的成员函数中可以访问同类型实例的私有变量. c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员. d.类的成 ...
- 《3+1团队》【Alpha】Scrum meeting 1
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...
- Java中的反射--Reflect
在张孝祥老师的Java讲解中,学习到了Java反射的一部分知识,觉得有必要好好学习一下哈. 一.反射的理解 经典总结:反射就是把Java类中的各种成分映射成为相应的Java类 例如:一个Java类中用 ...
- qt5.5.1配置winpcap4.1.2
下载winpcap开发包,下载地址是http://www.winpcap.org/devel.htm 下载之后解压