[平面图 并查集] BZOJ 4423 [AMPPZ2013]Bytehattan

来源:互联网 发布:农村淘宝新野招聘 编辑:程序博客网 时间:2024/05/22 06:41

平面图转化为对偶图,然后就会有些奇怪的性质可以利用

并查集维护


#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){static char buf[100000],*p1=buf,*p2=buf;if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }return *p1++;}inline void read(int &x){char c=nc(),b=1;for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}inline void read(char &x){for (x=nc();x!='E' && x!='N';x=nc());}int n,T;inline int P(int x,int y){if (x<1 || y<1 || x>n-1 || y>n-1) return T;return (x-1)*(n-1)+y;}int fat[4000005];inline int getfat(int u){return u==fat[u]?u:fat[u]=getfat(fat[u]);}int main(){int Q,last=0,x,y,fx,fy,u,v,x0,y0;char ch,ch0;freopen("t.in","r",stdin);freopen("t.out","w",stdout);read(n); read(Q);T=(n-1)*(n-1)+1;for (int i=1;i<=T;i++) fat[i]=i;while (Q--){if (last) {read(x0),read(y0),read(ch0);read(x),read(y),read(ch);}else{read(x),read(y),read(ch);read(x0),read(y0),read(ch0);}if (ch=='E')u=P(x,y),v=P(x,y-1);elseu=P(x,y),v=P(x-1,y);fx=getfat(u); fy=getfat(v);if (fx==fy)last=1;else{last=0;fat[fx]=fy;}if (!last) printf("TAK\n"); else printf("NIE\n"); }return 0;}


0 0
原创粉丝点击