test1样例过了为什么显示test1wa
查看原帖
test1样例过了为什么显示test1wa
925491
pengze36楼主2024/5/5 18:44

%%%各位dalao 谢谢!!

#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
int n,m;
int fa[10005];
int s[10005],t[10005];
bool jo[10005];
int sum[10005],tot;
map<int,int > ma;
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
int unionn(int x,int y){
	int fx=find(fa[x]);
	int fy=find(fa[y]);
	if(fx!=fy) fa[fx]=fy;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i){
		int a,b;
		string st;
	//	scanf("%d%d",&a,&b);//sj-s(i-1)
		cin>>a>>b>>st;
		a--;
		s[i]=a;
		t[i]=b;
	    jo[i]=((st[0]=='o')?1:0);
	    if(ma.find(a)==ma.end()) sum[++tot]=a,ma[a]=tot;
	    if(ma.find(b)==ma.end()) sum[++tot]=b,ma[b]=tot;
	}
	sort(sum+1,sum+1+tot);
	for(int i=1;i<=tot;++i){
		ma[sum[i]]=i;
	}
	for(int i=1;i<=tot*2;++i) fa[i]=i;
	for(int i=1;i<=m;++i){
		s[i]=ma[s[i]];
		t[i]=ma[t[i]];
		int fs=find(s[i]);
		int ft=find(t[i]);
		if(jo[i]==1){
			if(fs==ft){
				printf("%d\n",i-1);
				return 0;
			}
			else {
			unionn(t[i]+tot,s[i]),unionn(t[i],s[i]+tot);
			}
		}
		else {
			if(fs==find(t[i]+tot)){
				printf("%d\n",i-1);
				return 0;
			}
			else {
				unionn(t[i],s[i]);
				unionn(t[i]+tot,s[i]+tot);
			}
		}
	}
	printf("%d\n",m);
	return 0;
} 
2024/5/5 18:44
加载中...