#include<iostream> #include<algorithm> #include<cstdio> using namespace std; const int N=10010<<1; struct node { int l,r,ans; } q[N]; int a[N],fa[N],d[N],n,m,t_n; int get(int x) { if (x==fa[x]) return x; int root=get(fa[x]); d[x]^=d[fa[x]];//异或 return fa[x]=root; } inline int read_init()//离散化 { cin>>n>>m; for(int i=1;i<=m;i++) { char str[5]; scanf("%d%d%s",&q[i].l,&q[i].r,str); q[i].ans=(str[0]==‘e‘?0:1); a[++t_n]=q[i].l-1; a[++t_n]=q[i].r; } sort(a+1,a+1+t_n); n=unique(a+1,a+1+t_n)-a-1;//去重 } inline int work() { read_init(); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { int x=lower_bound(a+1,a+1+n,q[i].l-1)-a;//离散化后要找数 int y=lower_bound(a+1,a+1+n,q[i].r)-a; int p=get(x),q2=get(y); if (p==q2) { if ((d[x]^d[y])!=q[i].ans)//变量要相等,但是却不相等了. { cout<<i-1<<endl; return 0; } } else { fa[p]=q2; d[p]^=d[x]^d[y]^q[i].ans;//统统异或 } } cout<<m<<endl; } int main() { work(); return 0; }
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12249925.html
时间: 2024-10-12 03:17:33