Description

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

Solution

这个题我们可以考虑二分。

对于询问(x,y,z),二分k为答案,暴力做法是加入编号为1-k的边,判断x,y是否在同一个联通块内,如果是,则可覆盖点数为sz[x所在联通块点数](记为sz[x]),如果不是,则可覆盖点数为sz[x]+sz[y]。

然后看到询问特别多。em我们就可以考虑整体二分。(二分答案k,判断有多少个询问的答案小于等于它)。至于判断x,y是否处于同一联通块和求联通块大小,可以采用并查集。并查集可以按秩合并,这样撤销比较方便。(或者按size合并也是可以的)。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,Q,x[],y[],xx,yy,z;
struct ASK{int x,y,v,id;
}q[],re[];
int ans[],t[][];ASK a[],b[];
int sz[],fa[];
int get_fa(int x){return fa[x]==x?x:get_fa(fa[x]);}
void solve(int l,int r,int ansl,int ansr)
{
int _x,_y;
if (ansl==ansr)
{
for (int i=l;i<=r;i++) ans[q[i].id]=ansl;
_x=get_fa(x[ansl]);_y=get_fa(y[ansl]);
if (_x!=_y)
{
if (sz[_x]>sz[_y]) swap(_x,_y);
fa[_x]=_y;sz[_y]+=sz[_x];
}
return;
}
int ansmid=ansl+ansr>>,js1=,js2=,top=;
for (int i=ansl;i<=ansmid;i++)
{
_x=get_fa(x[i]);_y=get_fa(y[i]);
if (_x!=_y)
{
if (sz[_x]>sz[_y]) swap(_x,_y);
fa[_x]=_y;sz[_y]+=sz[_x];
t[][++top]=_x;t[][top]=_y;
}
}
for (int i=l;i<=r;i++)
{
_x=get_fa(q[i].x);_y=get_fa(q[i].y);
if ((_y!=_x&&sz[_x]+sz[_y]>=q[i].v)||(_y==_x&&sz[_x]>=q[i].v)) a[++js1]=q[i];
else b[++js2]=q[i];
}
for (;top;top--)
{
fa[t[][top]]=t[][top];sz[t[][top]]-=sz[t[][top]];
}
for (int i=;i<=js1;i++) q[i+l-]=a[i];
for (int i=;i<=js2;i++) q[i+l+js1-]=b[i];
solve(l,l+js1-,ansl,ansmid);
solve(l+js1,r,ansmid+,ansr);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++) scanf("%d%d",&x[i],&y[i]);
scanf("%d",&Q);
for (int i=;i<=Q;i++)
{
scanf("%d%d%d",&xx,&yy,&z);
q[i]=ASK{xx,yy,z,i};
}
for (int i=;i<=n;i++) fa[i]=i,sz[i]=;
solve(,Q,,m);
for (int i=;i<=Q;i++) printf("%d\n",ans[i]);
}

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

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

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

  2. [AGC002D] Stamp Rally

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

  3. [AGC002D] Stamp Rally 整体二分+并查集

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

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

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

  5. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  6. POJ3228 并查集或二分最大流枚举答案

    忘记写题意了.这题题意:给出每个地点的金矿与金库的数量,再给出边的长度.求取最大可通过边长的最小权值使每个金矿都能运输到金库里. 这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度 ...

  7. 【2018百度之星初赛 B】1001并查集 1004二分 1006不等式

    1001 degree 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6380 并查集向图中加点,分别记录与初始度数最多的点 直接相连的点数.独立的点数 ...

  8. HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流

    二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...

  9. NOIP 2010 关押罪犯 并查集 二分+二分图染色

    题目描述: S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值" ...

随机推荐

  1. 如何使用Loadrunner12录制WebSocket脚本

    简单说一下,关于Loadrunner12对WebSocket的支持可以参照以下文档: http://community.hpe.com/t5/LoadRunner-and-Performance/As ...

  2. Java集合源码 -- Collection框架概述

    1.概述 collection框架是用于处理各种数据结构的,要根据各种数据结构的特点理解它 它能够保存对象,并提供很多的操作去管理对象,当你面临下面的情况时,也许你应该考虑用集合类 1.容器的长度是不 ...

  3. [Python 网络编程] TCP编程/群聊服务端 (二)

    群聊服务端 需求分析: 1. 群聊服务端需支持启动和停止(清理资源); 2. 可以接收客户端的连接; 接收客户端发来的数据 3. 可以将每条信息分发到所有客户端 1) 先搭架子: #TCP Serve ...

  4. SSM框架优缺点和spring boot 比起优缺点是什么?

    一.SSM优缺点应该分开来说的,比如 1)spring 不说了,核心ioc.aop技术,ioc解耦,使得代码复用,可维护性大幅度提升,aop提供切面编程,同样的增强了生产力. 2)spring mvc ...

  5. Dynamic Rankings—带单点修改的主席树

    这道题应该是很不错的板子了\(\mathcal{\color{cyan}{Link}}\) \(\mathcal{\color{red}{Description}}\) 给定一个序列,有两种操作.一是 ...

  6. navicat导出数据库字典

    select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,COLUMN_COMMENT from information_schema.column ...

  7. ZooKeeper系列(2)--基于ZooKeeper实现简单的配置中心

    ZooKeeper节点的类型分为以下几类:  1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点 2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效 ...

  8. 『ACM C++』 PTA 天梯赛练习集L1 | 029-033

    哈哈,今天开始我也是学车人了~ 开始一千多道疯狂刷题~ ------------------------------------------------L1-029------------------ ...

  9. Angular 弹窗 控件

    这个控件个人很喜欢,比起primgNG等弹窗组建,这款弹窗可以很轻松的定义自己的样式和布局. 可控参数有:宽度,高度,是否带有关闭图标,基本满足基础弹窗需求. 并且 Title/Content/Foo ...

  10. html input file accept

    *.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video*.ac3 audio/ac3 AC3 Audio*.asf allpication/vnd.ms-asf ...