首页 > 其他 > 详细

[BZOJ4423][AMPPZ2013]Bytehattan(对偶图+并查集)

时间:2018-12-02 17:05:08      阅读:153      评论:0      收藏:0      [点我收藏+]

建出对偶图,删除一条边时将两边的格子连边。一条边两端连通当且仅当两边的格子不连通,直接并查集处理即可。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
 4 using namespace std;
 5 
 6 const int N=1510;
 7 char op[3];
 8 int n,Q,ans,a,b,x,y,fa[N*N];
 9 
10 int find(int x){ return fa[x]==x ? x : fa[x]=find(fa[x]); }
11 int F(int x,int y){ return (!x || !y || x==n || y==n) ? 0 : (x-1)*n+y; }
12 
13 int main(){
14     freopen("bzoj4423.in","r",stdin);
15     freopen("bzoj4423.out","w",stdout);
16     scanf("%d%d",&n,&Q);
17     rep(i,1,n*n) fa[i]=i;
18     while (Q--){
19         if (!ans) scanf("%d%d%s%*d%*d%*s",&a,&b,op);
20             else scanf("%*d%*d%*s%d%d%s",&a,&b,op);
21         if (op[0]==N) x=F(a,b),y=F(a-1,b); else x=F(a,b),y=F(a,b-1);
22         if (find(x)==find(y)) ans=1,puts("NIE"); else ans=0,puts("TAK");
23         x=find(x); y=find(y); fa[x]=y;
24     }
25     return 0;
26 }

 

[BZOJ4423][AMPPZ2013]Bytehattan(对偶图+并查集)

原文:https://www.cnblogs.com/HocRiser/p/10054104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!