map离散化+种类并查集 70分求调
查看原帖
map离散化+种类并查集 70分求调
1283888
zhuxuanze楼主2025/2/6 16:42
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=0;
map<int,int>mp;
int fa[21000];
//fa数组i表示前i个元素之和为奇数,i+2*m表示前i个元素之和为偶数 
int l,r;
string op;
int find(int x){
	if(fa[x]!=x)fa[x]=find(fa[x]);
	return fa[x];
}
void merge(int x,int y){
	fa[find(x)]=find(y);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=4*m+2;i++)fa[i]=i;
	for(int i=1;i<=m;i++){
		cin>>l>>r>>op;
		if(!mp.count(l))mp[l]=++cnt;
		if(!mp.count(r))mp[r]=++cnt;
		if(op=="odd"){
			if(find(mp[l]-1)==find(mp[r])){
				cout<<i-1;
				return 0;
			}
			else{
				merge(mp[l]-1,mp[r]+2*m+1);
				merge(mp[l]-1+2*m+1,mp[r]);
			}
		}
		else{
			if(find(mp[l]-1)==find(mp[r]+2*m+1)){
				cout<<i-1;
				return 0;
			}
			else{
				merge(mp[l]-1,mp[r]);
				merge(mp[l]-1+2*m+1,mp[r]+2*m+1);
			}
		}
	}
	cout<<m;
	return 0;
}

WA#6 #9 #10

2025/2/6 16:42
加载中...