日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(qm?logn)


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; }

總結

以上是生活随笔為你收集整理的P3247-[HNOI2016]最小公倍数【分块,并查集】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91碰在线视频 | 成人h在线 | 亚洲制服丝袜av | 综合网av | www婷婷av久久久影片 | 中文在线а√天堂 | 丁香花高清在线 | 日韩大片免费在线观看 | 老司机av影院 | 蜜桃免费av | 亚洲最大黄色网址 | 中文在线免费视频 | 亚洲在线看片 | 精品一区在线视频 | 香蕉视频啪啪 | 136fldh导航福利微拍 | 亚洲一区二区三区中文字幕 | 快色在线| 中文字幕乱妇无码av在线 | 好吊色综合 | 亚洲国产欧洲 | 国产精品日韩在线观看 | 精品久久久无码中文字幕边打电话 | 91av视频免费观看 | 欧美三级影院 | 私拍在线 | 日韩成年视频 | 国产精品午夜电影 | cao在线视频 | 印度午夜性春猛xxx交 | 男人的天堂av片 | 男人的天堂2018 | 国产喷白浆一区二区三区 | 亚洲一区二区三区午夜 | 亚洲国产私拍精品国模在线观看 | av有码在线观看 | 亚洲精品无码专区 | 黑人玩弄人妻一区二区三区四 | 婷婷激情成人 | 久久久国产成人一区二区三区 | 韩国女同性做爰三级 | 白丝校花扒腿让我c | av番号网| 亚洲综合在线成人 | 国产成人在线免费观看视频 | www.av视频在线观看 | 成人午夜网址 | 国产夜夜夜 | 日本一级做a爱片 | 教练含着她的乳奶揉搓揉捏动态图 | www视频在线 | 天堂久久av| 成人自拍网站 | 毛片av在线播放 | 精品一区二区视频 | 芒果视频污污 | 亚洲精品视频观看 | 日本特级片 | 一级福利视频 | 伊人成人在线观看 | 日韩毛片高清在线播放 | 99在线视频观看 | 久草国产精品视频 | 精品一区二区视频在线观看 | 亚洲最新 | 亚洲男人皇宫 | 国产黄色视屏 | 国产大片91 | 人人射人人爱 | 欧美一区二区三区视频 | 尤物视频在线观看国产性感 | 日韩黄色在线观看 | 亚洲私人影院 | 欧美成人做爰大片免费看黄石 | 日本高清免费看 | 手机看片1024日韩 | 亚洲国产精品久久久久久6q | 欧美日韩在线观看一区二区三区 | 色av综合| 四季av中文字幕 | 韩国女同性做爰三级 | 麻豆影音| 国产不卡免费视频 | 久久久福利 | 肉感丰满的av演员 | 91久久色| 黄色小视频免费观看 | 777精品伊人久久久久大香线蕉 | 成人毛片在线 | 操亚洲美女 | 久久曰视频 | 韩国成人理伦片免费播放 | av免费在线观看网站 | 中文字幕在线视频免费播放 | 日本成人免费在线视频 | 69堂精品 | 天堂网av在线播放 | 69国产在线 | 欧美一区免费观看 |