P3247-[HNOI2016]最小公倍数【分块,并查集】

正题

题目链接:https://www.luogu.com.cn/problem/P3247


题目大意

nnn个点mmm条边,每条边有(x,y,a,b)(x,y,a,b)(x,y,a,b)qqq次询问(x′,y′,a′,b′)(x',y',a',b')(x,y,a,b)表示询问是否存在一条x′−>y′x'->y'x>y的路径使得路径上amax=a′,bmax=b′a_{max}=a',b_{max}=b'amax=a,bmax=b


解题思路

考虑暴力的做法,我们用加入所有a≤a′a\leq a'aab≤b′b\leq b'bb的边加入,然后看x′y′x'y'xy是否在同一连通块且联通块中a,ba,ba,b最大值是否是a′,b′a',b'a,b

如何优化,我们把所有的边根据aia_iai的权值分成若干个块,对于每个块我们把所有a′a'a在这个范围的内的询问进行处理,我们把所有处理的询问和在块前面的边按照bbb排序,然后这一部分我们就用指针扫描加入,对于在块里的边我们就暴力扫描加入。

但是每个询问做完之后注意块里的边要删去,所以我们不能用路径压缩,用按秩合并即可。

时间复杂度O(qmlog⁡n)O(q\sqrt m\log n)O(qmlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cmath>
using namespace std;
const int N=1e5+10;
struct node{int x,y,a,b,s;
}e[N],q[N],cl[N];
int n,m,Q,tot,p[N];
int fa[N],siz[N],A[N],B[N];
bool ans[N];
bool cmpa(node x,node y)
{return x.a==y.a?(x.b<y.b):(x.a<y.a);}
bool cmpb(node x,node y)
{return x.b==y.b?(x.a<y.a):(x.b<y.b);}
int find(int x)
{return fa[x]==x?x:find(fa[x]);}
int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
void unionn(int x,int y,int a,int b){x=find(x),y=find(y);if(siz[x]>siz[y])swap(x,y);cl[++tot]=(node){x,y,A[y],B[y],siz[y]};A[y]=max(max(A[x],A[y]),a);B[y]=max(max(B[x],B[y]),b);if(x!=y)fa[x]=y;siz[y]=max(siz[y],siz[x]+1);return;
}
void Clear(){for(int i=tot;i>=1;i--){fa[cl[i].x]=cl[i].x;A[cl[i].y]=cl[i].a;B[cl[i].y]=cl[i].b;siz[cl[i].y]=cl[i].s;}tot=0;return;
}
int main()
{
//	freopen("multiple5.in","r",stdin); 
//	freopen("data.out","w",stdout);n=read();m=read();for(int i=1;i<=m;i++)e[i].x=read(),e[i].y=read(),e[i].a=read(),e[i].b=read();Q=read();for(int i=1;i<=Q;i++)q[i].x=read(),q[i].y=read(),q[i].a=read(),q[i].b=read(),q[i].s=i;sort(e+1,e+1+m,cmpa);sort(q+1,q+1+Q,cmpb); int T=sqrt(m*log2(n));e[m+1].a=1e9+1;for(int k=1;k<=m;k+=T){int l=k,r=min(k+T,m);int cnt=0;for(int i=1;i<=n;i++)fa[i]=i,A[i]=B[i]=-1,siz[i]=0;for(int i=1;i<=Q;i++)if(q[i].a>=e[l].a&&q[i].a<e[r+1].a)p[++cnt]=i;if(!cnt)continue;if(k)sort(e+1,e+l,cmpb);int pt=1;for(int i=1;i<=cnt;i++){int x=p[i];while(pt<l&&e[pt].b<=q[x].b)unionn(e[pt].x,e[pt].y,e[pt].a,e[pt].b),pt++;tot=0;for(int j=l;j<=r;j++)if(e[j].a<=q[x].a&&e[j].b<=q[x].b)unionn(e[j].x,e[j].y,e[j].a,e[j].b);int fx=find(q[x].x),fy=find(q[x].y);ans[q[x].s]=((fx==fy)&&(A[fx]==q[x].a)&&(B[fx]==q[x].b));Clear();}}for(int i=1;i<=Q;i++)if(ans[i])printf("Yes\n");else printf("No\n");return 0; 
}

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

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

相关文章

【DP】奖励卡(jzoj 3937)

奖励卡 jzoj 3937 题目大意 现在有一场比赛&#xff0c;想观看的人要提交申请&#xff0c;现在有x个人提交后得到两个号&#xff0c;y个人提交后得到一个号&#xff0c;有n轮抽号&#xff0c;每一轮抽一个号&#xff08;概率相等&#xff09;&#xff0c;这个号的所有者不参…

CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)

Description 一棵 n 个结点的树&#xff0c;有正边权。 用 y 条链覆盖这棵树&#xff0c;满足&#xff1a; 所有链连通&#xff08;有重点即算作相连&#xff09;点 x 被覆盖被覆盖的边的权值和尽可能大 q 次给出 x, y&#xff0c;询问最大边权和&#xff0c;强制在线。 n, q…

CAP带你轻松玩转ASP.NETCore消息队列

CAP是什么&#xff1f;CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案&#xff0c;是.Net Core Community中的第一个千星项目&#xff08;目前已经1656 Start&#xff09;&#xff0c;具有轻量级、易使用、高性能等特点。https://github.com/dotnetcore/CAP…

装备合成

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 输入包含t组数据 第一行一个整数t 接下来t行每行两个整数x,y 输出描述: 每组数据输出一行一个…

P4161-[SCOI2009]游戏【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4161 题目大意 一个1∼n1\sim n1∼n的排列&#xff0c;f(x)f(x)f(x)表示在置换xxx下置换多少次才能回到原来的排列&#xff0c;求在所有置换下f(x)f(x)f(x)的所有可能的值的数量。 解题思路 一个置换的fff值就是这个置换的…

【spfa】假期计划(jzoj 3936)

假期计划 jzoj 3936 题目大意 给你一个有向图&#xff08;n,m⩽20000n,m\leqslant 20000n,m⩽20000&#xff09;&#xff0c;现在有一些作为枢纽的点&#xff0c;且保证每一条边的两个点至少有一个是枢纽点&#xff0c;现在给q个询问&#xff0c;问某一个点到另一个点的最短…

CF650E Clockwork Bomb(树上构造类问题、并查集)

Description 给出两棵 n 结点的有标号树。 每次操作删去第一棵树的一条边&#xff0c;再加上一条边&#xff0c;需要保证此时还是一棵树。 构造一种操作序列&#xff0c;将第一棵树变成第二棵树&#xff0c;使得操作数最小。 n ≤ 51055 \times 10^55105 Solution 显然&…

微软必应从.NET Core 2.1获得了性能提升

据微软工程师Mukul Sabharwal介绍&#xff0c;在将微软搜索引擎必应迁移到.NET Core 2.1之后&#xff0c;内部服务延迟降低了34%&#xff0c;这主要归功于.NET社区贡献的改进。按照Sabharwal的说法&#xff0c;.NET Core的多项改进贡献了大部分的性能提升&#xff0c;包括字符串…

阶乘

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给定一个正整数 p 求一个最小的正整数 n&#xff0c;使得 n! 是 p 的倍数 输入描述: 第一行输入一个正整数…

P2151-[SDOI2009]HH去散步【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P2151 题目大意 nnn个点mmm条边的一张无向图&#xff0c;走过一条边后下一次就不能再走这条&#xff0c;求AAA到BBB之间有多少长度为ttt的路径。 解题思路 因为有不能再走同一条的限制&#xff0c;所以不能直接裸上矩乘&…

IQ测试(jzoj 5048)

IQ测试 jzoj 5048 题目大意 给出一个序列a&#xff0c;然后有m个询问&#xff0c;每个询问给出一个序列&#xff0c;问这个序列是否可以由序列a删掉一些数得到的 输入样例 7 1 5 4 5 7 8 6 4 5 1 5 5 8 6 3 2 2 2 3 5 7 8 4 1 5 7 4输出样例 TAK NIE TAK NIE数据范围 对…

CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)

Description 给出一棵 n 个结点的树&#xff0c;点 i 有正权值 wiw_iwi​&#xff0c;wiw_iwi​ 互不相同。 除了权值最小的点&#xff0c;保证每个点 u 都有一个邻点 v 使得 wvw_vwv​ < wuw_uwu​。 构造一棵树&#xff0c;最小化代价&#xff1a; 对于每个点 u&#xf…

搭建基于云端的中间层以支持跨平台的智能视觉服务

不断演进的应用场景初级应用场景—宅在家里场景&#xff1a;Bob同学有一天在网上看到了一张建筑物的图片&#xff0c;大发感慨&#xff1a;"好漂亮啊&#xff01;这是哪里&#xff1f;我要去亲眼看看&#xff01;"Bob同学不想问别人&#xff0c;可笑的自尊心让他觉得…

YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/3 题目大意 给出两个字符串A,BA,BA,B&#xff0c;求它们的最长公共子序列。 解题思路 先考虑朴素的dpdpdp&#xff0c;设fi,jf_{i,j}fi,j​表示到AAA的第iii个&#xff0c;BBB的第jjj个时候的最长公共子序列长度…

牛客算法周周练4 题解

比赛链接 文章目录A [SDOI2016]齿轮B Rinne Loves XorC 阶乘D 小石的签到题E 装备合成A [SDOI2016]齿轮 B Rinne Loves Xor C 阶乘 两个方法 题解 D 小石的签到题 题解 E 装备合成 两个方法 题解

纪中B组模拟赛总结(2020.2.22)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3333lyflyflyf160160160100100100101010505050 总结 T1想到DP&#xff0c;但一开始想到的方法会TLE&#xff0c;后来想到可以减去一层&#xff0c;就A了 T2瞎想了一波&#xff0c;打了一个类似于FloyedFloyedFl…

高等数学超入门学习笔记

极限 百度百科 1.数列极限 百度百科 1.1 数列 1.2 数列极限 1.3 单调收敛原理 {xn}\{x_n\}{xn​}单调递增且{xn}\{x_n\}{xn​}有上界&#xff08;可以找到实数M使{xn}\{x_n\}{xn​}中任意一项小于M&#xff09;&#xff0c;{xn}\{x_n\}{xn​}收敛&#xff08;存在象限a&…

Microsoft宣布正式发布Linux on ASE

Microsoft宣布正式发布&#xff08;GA&#xff09;用于ASE&#xff08;应用服务环境&#xff0c;App Service Environment&#xff09;的Linux。该服务使客户可结合使用Linux上的应用服务&#xff08;App Service&#xff09;特性与ASE。在正式发布版之前&#xff0c;Microsoft…

YbtOJ#20236-[冲刺NOIP2020模拟赛Day9]红点蓝点【线段树,堆】

正题 题目链接:https://www.ybtoj.com.cn/contest/66/problem/4 题目大意 平面上nnn个红点&#xff0c;nnn个蓝点&#xff0c;对于没一个红点求一个与它纵坐标距离不超过ddd的一个点与它的曼哈顿距离最短。 解题思路 一个点分为两种情况&#xff0c;在询问点左边的红点要求横…

Rinne Loves Xor

链接&#xff1a; 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 第一行一个整数 N&#xff0c;表示数组 A 和 B 的长度。 第二行 N …