BZOJ4423 [AMPPZ2013]Bytehattan

Link
先平面图转对偶图,然后就是一个并查集的事了。

#include<cstdio>
const int N=2250007;
int n,q,fa[N];char o[3];
int find(int x){return x==fa[x]? x:fa[x]=find(fa[x]);}
int h(int x,int y){return !x||!y||x==n||y==n? 0:(x-1)*n+y;}
int main()
{
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n*n;++i) fa[i]=i;
    for(int ans=0,u,v,a,b;q;--q)
    {
	ans? scanf("%*d%*d%*s%d%d%s",&a,&b,o):scanf("%d%d%s%*d%*d%*s",&a,&b,o);
	u=h(a,b),v=o[0]=='N'? h(a-1,b):h(a,b-1);
	find(u)==find(v)? (ans=1,puts("NIE")):(ans=0,puts("TAK")),fa[find(u)]=find(v);
    }
}
原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12235405.html