AcWing 1250. 格子游戏 并查集模板题
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 1250. 格子游戏 并查集模板题相关的知识,希望对你有一定的参考价值。
并查集常用一维,所以对于坐标(x,y),转换为x*n+y,xy都要从0开始。
其实就是3x3的转换为:
0 1 2
3 4 5
6 7 8
这种。
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
//======================
const int N=40005;
int n,m;
int fa[N];
int Get(int x,int y)
{
return x*n+y;
}
int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void merge(int x,int y)
{
fa[x]=y;
}
int main()
{
cin>>n>>m;
fir(i,0,n*n) fa[i]=i;
fir(i,1,m)
{
int a,b;char ch;
cin>>a>>b>>ch;
a--,b--;
int t=Get(a,b);
int t2;
if(ch=='D') //下
{
t2=Get(a+1,b);
}
else //右
{
t2=Get(a,b+1);
}
int temp1=find(t),temp2=find(t2);
if(temp1==temp2)
{
cout<<i;return 0;
}
else
{
merge(temp1,temp2);
}
}
cout<<"draw";
return 0;
}
以上是关于AcWing 1250. 格子游戏 并查集模板题的主要内容,如果未能解决你的问题,请参考以下文章