猜结论大法好!!
由于删边不好维护,所以将平面图转化为对偶图,这样在平面图上删边相当于在对偶图上加边,在平面图上是否联通转化为在对偶图上是否不连通,类似于平面图的最大流转化为对偶图的最短路
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define ll long long
#define N 1000009
using namespace std;
int sc()
{
int i=0,f=1; char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
return i*f;
}
int fa[2500005];
int n,K,m,M,last=1;
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void cal(int x,int y,char s)
{
int a=x*m+y+1,b;
if(s=='E')b=a-1;else b=a-m;
int fx=find(a),fy=find(b);
if(fx==fy)
{
last=0;
puts("NIE");
}
else
{
fa[fx]=fy;
last=1;
puts("TAK");
}
}
int main()
{
n=sc(),K=sc();
m=n+1,M=m*m;
for(int i=1;i<=M;i++)fa[i]=i;
for(int i=1;i<=m;i++)
fa[i]=fa[M-i+1]=fa[i*m]=fa[i*m+1]=1;
while(K--)
{
int a,b,c,d;char s1[5],s2[5];
a=sc(),b=sc(),scanf("%s",s1);
c=sc(),d=sc(),scanf("%s",s2);
if(last==1)cal(a,b,s1[0]);
else cal(c,d,s2[0]);
}
return 0;
}