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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

loj121-动态图连通性

發布時間:2023/12/20 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 loj121-动态图连通性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Solution

線段樹分治, 然后直接在線段樹上dfs, 在進入/回溯的過程中維護并查集的merge/split.

對于split操作, 可以在merge時按秩合并, 然后利用棧記錄, split時恢復即可.

Code

#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<set> #include<map> #include<vector> using namespace std; #define rep(i,l,r) for(register int i=(l);i<=(r);++i) #define repdo(i,l,r) for(register int i=(l);i>=(r);--i) #define il inline typedef double db; typedef long long ll;//--------------------------------------- const int nsz=5050,msz=5e5+50; int n,m; int edno[nsz][nsz],pe=0,pq=0,pq1=1; struct te{int f,t,l,r;}edge[msz]; struct tq{int a,b,t,ans;}que[msz];int fa[nsz],dep[nsz]; int stk[msz][2],top=0;//0 y; 1 dep[x] int find(int p){return p==fa[p]?p:find(fa[p]);} bool conn(int a,int b){return find(a)==find(b);} void merge(int a,int b){a=find(a),b=find(b);if(a==b)return;if(dep[a]<dep[b])swap(a,b);stk[++top][0]=b,stk[top][1]=dep[a];fa[b]=a,dep[a]=max(dep[a],dep[b]+1); } void del(int top1){for(;top!=top1;--top){int a=stk[top][0],b=stk[top][1];dep[fa[a]]=b,fa[a]=a;} }vector<int> ee[msz*4]; #define ls(p) ((p)<<1) #define rs(p) ((p)<<1|1) void insert(int v,int l,int r,int rt,int rl,int rr){if(l<=rl&&rr<=r){ee[rt].push_back(v);return;}int mid=(rl+rr)>>1;if(l<=mid)insert(v,l,r,ls(rt),rl,mid);if(mid<r)insert(v,l,r,rs(rt),mid+1,rr); } void dfs(int rt,int rl,int rr){int now=top;for(int i:ee[rt])merge(edge[i].f,edge[i].t);if(rl==rr){while(pq1<=pq&&que[pq1].t==rl)que[pq1].ans=conn(que[pq1].a,que[pq1].b),++pq1;}else{int mid=(rl+rr)>>1;dfs(ls(rt),rl,mid);dfs(rs(rt),mid+1,rr);}del(now); }int main(){ // freopen("a.in","r",stdin); // freopen("a.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0);cin>>n>>m;int a,b,c;rep(i,1,m){cin>>a>>b>>c;if(b>c)swap(b,c);if(a==0){edge[++pe]=(te){b,c,i,m};edno[b][c]=pe;}else if(a==1){edge[edno[b][c]].r=i;}else{que[++pq]=(tq){b,c,i,0};}}rep(i,1,n)fa[i]=i,dep[i]=1;rep(i,1,pe)insert(i,edge[i].l,edge[i].r,1,1,m);dfs(1,1,m);rep(i,1,pq){cout<<(que[i].ans?"Y":"N")<<'\n';}return 0; }

轉載于:https://www.cnblogs.com/ubospica/p/10608486.html

總結

以上是生活随笔為你收集整理的loj121-动态图连通性的全部內容,希望文章能夠幫你解決所遇到的問題。

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