RT。写的时候不会离散化,然后用map实现,但是只有六十分。主体思路还是种类并查集,大佬可以看看代码嘛。```cpp
#include
#include
#include
#include
using namespace std;
map<int, int>fa;
int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int x,int y)
{
fa[find(x)] = find(y);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,m; cin >> n>>m;
int cnt = 0;
for (int i=1;i<=m;i++)
{
string s;
int a, b; cin >> a >> b >> s;
if (cnt > 0)continue;
if (fa.find(a-1) == fa.end())
{
fa[a-1] = a-1, fa[a-1 + n] = a-1 + n;
}
if (fa.find(b) == fa.end())
{
fa[b] = b, fa[b + n] = b + n;
}
if (s[0]=='e')
{
if (find(a - 1) == find(b + n)) { cnt = i; continue;}
else
{
merge(a-1,b);
merge(a-1+n,b+n);
}
}
else if(s[0]=='o')
{
if (find(a - 1) == find(b)) { cnt = i; continue;}
else
{
merge(a-1,b+n);
merge(a-1+n,b);
}
}
}
if (cnt == 0)cout << m << endl;
else cout << cnt - 1 << endl;
return 0;
}