比赛 2025.3.18 评测结果 AAAAAAAAAA
题目名称 奇偶性游戏 最终得分 100
用户昵称 会挽弯弓满月 运行时间 0.057 s
代码语言 C++ 内存使用 4.07 MiB
提交时间 2025-03-18 20:53:56
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int M=5010;
ll n,m;
ll cnt;
struct node{
	ll l,r;
	string opt;	
}a[M*2];
ll b[M*2];
ll fa[M*2];
ll find(ll x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
bool ans;
int main(){
	freopen("parity.in","r",stdin);
	freopen("parity.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	ll l,r;
	for(int i=1;i<=m;i++){
		scanf("%lld%lld",&a[i].l,&a[i].r);
		cin>>a[i].opt;
		a[i].l--;
		b[++cnt]=a[i].l;
		b[++cnt]=a[i].r;
	}
	sort(b+1,b+cnt+1);
	ll tot=unique(b+1,b+cnt+1)-b-1;
	for(int i=1;i<=m;i++){
		a[i].l=lower_bound(b+1,b+tot+1,a[i].l)-b;
		a[i].r=lower_bound(b+1,b+tot+1,a[i].r)-b;
	}
	for(int i=1;i<=tot*2;i++){
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		if(a[i].opt=="even"){
			if(find(a[i].l)==find(a[i].r+tot)||find(a[i].l+tot)==find(a[i].r)){
				printf("%lld",i-1);
				ans=1;
				break;
			}
			fa[find(a[i].l)]=find(a[i].r);
			fa[find(a[i].l+tot)]=find(a[i].r+tot);
		}
		else{
			if(find(a[i].l)==find(a[i].r)||find(a[i].l+tot)==find(a[i].r+tot)){
				printf("%lld",i-1);
				ans=1;
				break;
			}
			fa[find(a[i].l)]=find(a[i].r+tot);
			fa[find(a[i].l+tot)]=find(a[i].r);
		}
	}
	if(!ans) printf("%lld",m);
	return 0;
}