enlaces a los temas: Haga clic aquí para
pensar: Incluso una fusión de las dos partes en el set, si se encuentra en ambos extremos del conjunto de puntos que han estado en la misma colección, lo que indica que se ha producido anillo.
Consejo: el uso puede ser coordenadas bidimensionales en coordenadas unidimensionales, siempre que a partir comenzar.
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 40010;
int f[N];
int n, m;
int get(int x, int y)
{
return x * n + y;
}
int find(int x)
{
if(x != f[x]) f[x] = find(f[x]);
return f[x];
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n * n; ++i) f[i] = i;
int res = 0;
for(int i = 1; i <= m; ++i)
{
int x, y;
char c;
cin >> x >> y >> c;
if(res) continue;
x--, y--; // 下标从0开始
int a, b;
a = get(x, y);
if(c == 'D') b = get(x + 1, y);
else b = get(x, y + 1);
int fa = find(a), fb = find(b);
if(fa == fb) res = i;
else f[fa] = fb;
}
if(res) cout << res << endl;
else cout << "draw" << endl;
return 0;
}