AcWing 239. 奇偶游戏
原题链接
中等
作者:
开始独自升级
,
2023-12-11 23:37:14
,
所有人可见
,
阅读 41
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int> D;
const int N=1e4+10;
int p[N],d[N];
int n,m;
int idx;
int get(int x)
{
if(D.count(x)==0)
return D[x]=++idx;
return D[x];
}
int find(int x)
{
if(p[x]!=x)
{
int t=find(p[x]);
d[x]+=d[p[x]];
p[x]=t;
}
return p[x];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=N;i++)
p[i]=i;
int res=m;
for(int i=1;i<=m;i++)
{
string op;
int l,r;
cin>>l>>r>>op;
int t=0;
int a=get(l-1),b=get(r);
int pa=find(a),pb=find(b);
if(op=="odd") t=1;
if(pa==pb)
{
if(((d[a]+d[b])%2+2)%2!=t)
{
res=i-1;
break;
}
}
else
{
p[pa]=pb;
d[pa]=d[a]^d[b]^t;
}
}
cout<<res<<endl;
return 0;
}