没有de出错,#4 #6 #10 的点WA了,求助dalao~~~
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N =10100;
struct Uni
{
int fa[N+100];
bool d[N+100];
int area;
Uni(int n)
{
area=n;
for(int i=1; i<=N; i++)
fa[i]=i, d[i]=false;
}
int find(int x)
{
if(x==fa[x]) return fa[x];
int r=find(fa[x]); d[x]^=d[fa[x]];
return fa[x]=r;
}
void merge(int x, int y, bool f)
{
if(find(x)!=find(y)) --area;
fa[find(x)]=find(y);
d[find(x)]=d[x]^d[y]^f;
}
};
ll x[5100],y[5100];
bool f[5100];
ll s[10100],sum;
int main()
{
int n,m;
int i;
cin>>n>>m;
for(i=1; i<=m; i++)
{
char c[10];
scanf("%lld%lld%s", &x[i], &y[i], c);
f[i]=(c[0]=='o');
s[i*2-1]=x[i]-1; s[i*2]=y[i];
}
sort(s+1, s+1+m*2);
sum=unique(s+1, s+1+m*2)-s-1;
Uni u(sum);
for(i=1; i<=m; i++)
{
int l=lower_bound(s+1, s+1+sum, x[i]-1)-s;
int r=lower_bound(s+1, s+1+sum, y[i])-s;
if(u.find(l)!=u.find(r))
u.merge(l, r, f[i]);
else if((u.d[l]^u.d[r])!=f[i])
break;
}
cout<<i-1;
return 0;
}