并查集的应用
#include<iostream>
using namespace std;
const int N = 40010;
int p[N],a,b; // a,b代表输入的坐标
int x,y; //x代表转化为一维的坐标,y代表向右或者向下的坐标
int find(int x){
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
void merge(int a,int b){
p[find(a)] = find(b);
}
int main(){
int n,m;
cin >> n >> m;
for(int i = 1;i <= n * n;i++) p[i] = i; //初始化
char op[2];
for(int i = 1;i <=m;i++){ // i用来遍历 ,同时用来标记第几步完成
scanf("%d%d%s",&a,&b,op);
//二维数组存到一维
x = (a - 1) * n + b;
if(*op == 'D') y = a * n + b;
else y = (a - 1) * n + b + 1;
//判断x,y是否在同一集合
if(find(x) == find(y)){
cout << i << endl;
return 0;
}
merge(x,y);
}
cout << "draw" << endl;
return 0;
}