写个类似于并查集的东东就行了
#include<bits/stdc++.h>
#define maxn 550000
int fa[maxn],n,q,ok,Fx,Fy;
inline int id(int x,int y)
{
return (x==0||x==n||y==0||y==n)?0:(x-1)*(n-1)+y;
}
inline int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
inline void solve(int a,int b,int c,int d)
{
if(b>d)
b^=d^=b^=d;
if(a>c)
a^=c^=a^=c;
if(a==c)
Fx=find(id(a-1,b));
else
Fx=find(id(a,b-1));
bool flag=Fx!=(Fy=find(id(a,b)));
puts(flag?"HAHA":"DAJIA"),fa[Fx]=Fy;
ok=flag;
}
int main()
{
scanf("%d%d",&n,&q);
for(register int i=1;i<=2*n*n;++i)
fa[i]=i;
int x1,x2,y1,y2,x_1,x_2,y_1,y_2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
solve(x1,y1,x2,y2);
for(register int i=2;i<=q;++i)
{
scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x_1,&y_1,&x_2,&y_2);
if(ok)
solve(x1,y1,x2,y2);
else
solve(x_1,y_1,x_2,y_2);
}
return 0;
}
来源:zr