调来调去只有30分,求助各位大佬
#include<bits/stdc++.h>
using namespace std;
const int L=1e5+10;
struct query{
int l,r;
bool k;
}q[L];
int fa[L],a[L],n,m;
char str[10];
inline int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d %s",&q[i].l,&q[i].r,str);
q[i].l--;
if(!strcmp(str,"even"))q[i].k=true;
else q[i].k=false;
a[2*i-1]=q[i].l;a[2*i]=q[i].r;
}
sort(a+1,a+2*m+1);
int len=unique(a+1,a+2*m+1)-a-1;
for(int i=1;i<=m;i++){
q[i].l=lower_bound(a+1,a+len+1,q[i].l)-a;
q[i].r=lower_bound(a+1,a+len+1,q[i].r)-a;
}
// printf("%d",len);
// for(int i=1;i<=m;i++)printf("%d %d %d\n",q[i].l,q[i].r,q[i].k);
for(int i=1;i<=2*len;i++)fa[i]=i;
for(int i=1;i<=m;i++){
if(q[i].k){
if(find(q[i].l)==find(q[i].r+len) || find(q[i].r)==find(q[i].l+len) || find(q[i].l+len)==find(q[i].r) || find(q[i].r+len)==find(q[i].l)){
printf("%d",i);return 0;
}
fa[find(q[i].l)]=find(q[i].r);
fa[find(q[i].l+len)]=find(q[i].r+len);
}else{
if(find(q[i].l)==find(q[i].r)){
printf("%d",i);return 0;
}
fa[find(q[i].r+len)]=find(q[i].l);
fa[find(q[i].l+len)]=find(q[i].r);
}
}
printf("%d",m);
return 0;
}