BZOJ4423: [AMPPZ2013]Bytehattan

平面图转对偶图之后变成并查集

#include<cstdio>
int id[1500][1500];
int fa[2250002];

char c;
inline void read(int &a)
{a=0;do c=getchar();while(c<'0'||c>'9');while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();}
inline char get()
{
    do c=getchar();while(c!='N'&&c!='E');
    return c;
}
int find(int x){return fa[x]=(fa[x]==x?x:find(fa[x]));}
int main()
{
int x,y,i,j,n,k,cnt=1,ans=1;
char c[2],d[2];read(n),read(k);
for(i=1;i<n;++i)
for(j=1;j<n;++j)
fa[cnt]=id[i][j]=cnt,++cnt;
while(k--){
if(ans)
{
    read(x),read(y);
    c[0]=get();
    read(i),read(j);d[0]=get();
}
else
{
read(i),read(j),d[0]=get();
read(x),read(y),c[0]=get();
}
i=find(id[x][y]);
j=find(c[0]=='N'?id[x-1][y]:id[x][y-1]);
if(ans=(i!=j))fa[i]=j;
puts(ans?"TAK":"NIE");
}
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值