代码如下,6,8,9,10四个点不过qwq
#include<bits/stdc++.h>
using namespace std;
unordered_map <int, int> Fa, dis;
struct Node
{
int x, y, ans;
string s;
};
unordered_map <int, Node> A;
int n, m;
void Merge(int, int, int);
int Get(int);
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
scanf("%d%d", &A[i].x, &A[i].y);
Fa[A[i].x] = A[i].x, Fa[A[i].y] = A[i].y;
cin >> A[i].s;
if (A[i].s == "odd") A[i].ans = 1;
else A[i].ans = 0;
}
for (int i = 1; i <= m; i++)
{
int x = A[i].x - 1, y = A[i].y;
// cout << Get(x) << " " << Get(y) << endl;
if (Get(x) == Get(y))
{
if (dis[x] ^ dis[y] != A[i].ans)
{
printf("%d", i - 1);
return 0;
}
}
else Merge(x, y, A[i].ans);
}
printf("%d", m);
return 0;
}
int Get(int x)
{
if (Fa[x] == x) return x;
int Root = Get(Fa[x]);
dis[x] ^= dis[Fa[x]];
return Fa[x] = Root;
}
void Merge(int x, int y, int ans)
{
int p = Get(x), q = Get(y);
Fa[p] = q;
dis[p] = dis[x] xor dis[y] xor ans;
}