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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj#4423-[AMPPZ2013]Bytehattan【并查集】

發(fā)布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj#4423-[AMPPZ2013]Bytehattan【并查集】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題

題目鏈接:https://darkbzoj.tk/problem/4423


題目大意

給出一個n?nn*nn?n的網(wǎng)格圖,然后四聯(lián)通的點之間連接。每次刪掉一條邊求這條邊的兩個點是否連通。強制在線。

1≤n≤1500,1≤m≤2n(n?1)1\leq n\leq 1500,1\leq m\leq 2n(n-1)1n1500,1m2n(n?1)


解題思路

轉(zhuǎn)換成對偶圖之后就可以變成加邊判斷連通性的問題了。

一個很簡單的理解就是如果新的刪去的邊在對偶圖構(gòu)成了一個環(huán)那么就會被分成環(huán)內(nèi)和環(huán)外了。

時間復(fù)雜度O(mα(m))O(m\alpha(m))O(mα(m))


code

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1600; int n,k,fa[N*N]; int find(int x) {return (fa[x]==x)?(x):(fa[x]=find(fa[x]));} void Unionm(int x,int y){x=find(x);y=find(y);if(x==y)return;fa[x]=y; } int main() {scanf("%d%d",&n,&k);bool last=1;for(int i=1;i<=(n+1)*(n+1);i++)fa[i]=i;for(int i=1;i<=n;i++){Unionm(i,i+1);Unionm((i-1)*(n+1)+1,i*(n+1)+1);Unionm(n*(n+1)+i,n*(n+1)+i+1);Unionm((i-1)*(n+1)+n+1,i*(n+1)+n+1);}for(int i=1;i<=k;i++){int x1,x2,y1,y2,x,y,p,q;char op1[2],op2[2],op;scanf("%d%d%s",&x1,&y1,&op1);scanf("%d%d%s",&x2,&y2,&op2);if(last)x=x1,y=y1,op=op1[0];else x=x2,y=y2,op=op2[0];if(op=='N'){p=x*(n+1)+y+1;q=(x-1)*(n+1)+y+1;p=find(p);q=find(q);if(p!=q)last=1,puts("TAK");else last=0,puts("NIE");}else{p=x*(n+1)+y+1;q=x*(n+1)+y;p=find(p);q=find(q);if(p!=q)last=1,puts("TAK");else last=0,puts("NIE");}Unionm(p,q);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的bzoj#4423-[AMPPZ2013]Bytehattan【并查集】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。