Description

给你一个n个点m个条边构成的简单无向连通图,有Q组询问,每次询问从两个点x,y走出两条路径,使这两条路径覆盖z个点,求得一种方案使得路径上经过的变的最大编号最小。

Input

第一行两个整数n,m,如题目所述

接下来m行,每行两个整数x,y描述一条边

接下来一个整数Q,如题目所述

接下来Q行,每行三个整数x,y,z,如题目描述

Output

Q行,每行一个正整数,如题目描述

Sample Input

5 6
2 3
4 5
1 2
1 3
1 4
1 5
6
2 4 3
2 4 4
2 4 5
1 3 3
1 3 4
1 3 5

Sample Output

1
2
3
1
5
5

HINT

n,m,q≤10^5

Sol

考虑单组询问的做法,显然可以二分答案,然后用并查集把所有小于等于的边合并,判断是否可行即可。

这里每组询问互相独立,我们上整体二分即可。

如果把整体二分写成BFS形式的话不用还原并查集啦,而且好写得多,具体地,我们建出类似线段树的东西,然后求出每个线段的mid,按照顺序并查集合并,如果当前i和这一层其中一个mid相等就判断这个节点vector中的元素是否达标并下传即可。

每一层要清空并查集。

Code

#include <bits/stdc++.h>
using namespace std;
struct que{int x,y,z;}q[100005];vector<int>v[800050];
int n,m,Q,x,y,now=1,U[100005],V[100005],cnt[100005],ans[100005],mid[800050],l[800050],r[800050],f[100005],sz[100005];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
void bud(int x,int L,int R){l[x]=L;r[x]=R;mid[x]=(L+R)>>1;if(L==R) return;bud(x*2,L,mid[x]);bud(x*2+1,mid[x]+1,R);}
int main()
{
scanf("%d%d",&n,&m);memset(ans,0x3f,sizeof(ans));
for(int i=1;i<=m;i++) scanf("%d%d",&x,&y),U[i]=x,V[i]=y;
scanf("%d",&Q);bud(1,1,m);
for(int i=1;i<=Q;i++) scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].z),v[1].push_back(i);
for(int gg=m*4;gg;gg>>=1)
{
for(int i=1;i<=n;i++) f[i]=i,sz[i]=1,cnt[i]=0;
for(int i=1;i<=m;i++)
{
if((x=find(V[i]))!=(y=find(U[i]))) f[y]=f[x],sz[x]+=sz[y];
if(i==mid[now]) for(int j=0;j<v[now].size();j++)
{
int a=find(q[v[now][j]].x),b=find(q[v[now][j]].y);
cnt[v[now][j]]=(a==b)?sz[a]:sz[a]+sz[b];
if(cnt[v[now][j]]<q[v[now][j]].z) v[now*2+1].push_back(v[now][j]);
else v[now*2].push_back(v[now][j]),ans[v[now][j]]=mid[now];
}
if(i==mid[now]||!mid[now]) now++;
}
}
for(int i=1;i<=Q;i++) printf("%d\n",ans[i]);
}

[AGC002D] Stamp Rally 整体二分+并查集的更多相关文章

  1. 【做题】agc002D - Stamp Rally——整体二分的技巧

    题意:给出一个无向连通图,有\(n\)个顶点,\(m\)条边.有\(q\)次询问,每次给出\(x,y,z\),最小化从\(x\)和\(y\)开始,总计访问\(z\)个顶点(一个顶点只计算一次),经过的 ...

  2. [AGC002D] Stamp Rally

    确实有想到重构树,不过没有继续下去的思路. 可能是对重构树的性质不太懂. 这种题目我们可以二分答案,考虑怎么\(check\)呢,整体二分+并查集,建出重构树,找去第一个小于这个数的方点,查询他的子树 ...

  3. HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)

    HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...

  4. 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】

    题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...

  5. 洛谷:P1783 海滩防御(二分+并查集 最短路 最小生成树)

    题意: 给定长度为N的海滩,然后有M做防御塔,给出每座塔的位置Xi,到海岸的距离Yi. 求防御塔上最小观测半径Ri,使得海滩被封锁. 思路:要使左边界和右边界连通. 很nice,可以二分+并查集做. ...

  6. POJ2349二分+并查集,类似最小树的贪心

    题意:       给你n个点,你的任务是构建一颗通讯树,然后给你一个s表示可以选出来s个点两两通讯不花钱,就是费用是0,其他的费用就是两点的距离,有个要求就是其他的费用中最大的那个最小. 思路:   ...

  7. [AGC002D] Stamp Rally (并查集+整体二分)

    Description 给你一个n个点m个条边构成的简单无向连通图,有Q组询问,每次询问从两个点x,y走出两条路径,使这两条路径覆盖z个点,求得一种方案使得路径上经过的变的最大编号最小. Input ...

  8. I-图的分割(二分+并查集)

    图的分割 题目大意: 给你n个点,m条边的图,没有重环和自环,所有的点都联通 可以通过删除几条边使得整个图变成两个联通子图 求删除的边中最大边权的最小值 解题思路: 看到"最大边权的最小值& ...

  9. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

随机推荐

  1. 双杀 0day 漏洞(CVE-2018-8174)复现

    漏洞描述: CVE-2018-8174 是 Windows VBScript Engine 代码执行漏洞. 微软在4月20日早上确认此漏洞,并于5月8号发布了官方安全补丁,对该 0day 漏洞进行了修 ...

  2. CRF++评测脚本CoNLL 2000

    关于CRF++工具如何使用这里就不再赘述了,网上相关资源很多,如官方提供的http://crfpp.googlecode.com/svn/trunk/doc/index.html.虽然http://w ...

  3. OSGI 模块化

    推荐教程:https://course.tianmaying.com/osgi-toturial+osgi-concept#15

  4. EditText中onEditorAction监听事件执行两次

    Android的EditText通过setOnEditorActionListener给文本编辑框设置监听事件,但是在其处理方法onEditorAction中的逻辑在每次回车后都触发了两次, 原来是在 ...

  5. Iterator(迭代器)的一般用法 (转)

    迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...

  6. 如何给网页标题栏上添加图标(favicon.ico)(转)

    如何给网页标题栏上添加图标(favicon.ico)   favicon.ico详解:     favicon是Favorites Icon的缩写,favicon.ico是指显示在浏览器收藏夹.地址栏 ...

  7. js颜色拾取器

    几年前,很难找到一个合适的颜色选择器.正好看到很多不错的JavaScript颜色选择器插件,故而把这些编译汇总.在本文,Web设计师和开发人员 Kevin Liew 选取了11个相应插件,有些会比较复 ...

  8. Makefile 编写规则 - 1

    Makefilen内容 1. 显示规则:显示规则说明了,如何生成一个或多个目标.这是由Makefile指出要生成的文件和文件依赖的文件.2. 隐晦规则:基于Makefile的自动推导功能3. 变量的定 ...

  9. 各种RNAseq原理

    RNA Sequencing Methods Low-Level RNA Detection CEL-Seq CirSeq CLaP CytoSeq Digital RNA Sequencing DP ...

  10. Luogu 3899 [湖南集训]谈笑风生

    BZOJ 3653权限题. 这题方法很多,但我会的不多…… 给定了$a$,我们考虑讨论$b$的位置: 1.$b$在$a$到根的链上,那么这样子$a$的子树中的每一个结点(除了$a$之外)都是可以成为$ ...