并查集做的,有没有巨佬帮蒟蒻看看
查看原帖
并查集做的,有没有巨佬帮蒟蒻看看
494218
m3378557542楼主2022/8/7 23:33
#include<iostream>
#include<cstring>
using namespace std;

int n,m,X,Y,x[100010],y[100010],fa[100010],t,T=0,cnt=1;

int find(int x)
{
	if(fa[x]!=x) x=find(fa[x]);
	return fa[x];
}

void mergeSet(int x,int y)
{
	int xx=find(x);
	int yy=find(y);
	if(xx==yy) return;
	if(xx>yy) swap(xx,yy);
	fa[yy]=xx;
	cout<<fa[yy];
}

int main()
{
	cin>>n>>m;
	memset(fa,0,sizeof(fa));
	for(register int i=1;i<=m;i++)
	{
		cin>>X>>Y>>t;
		x[t]=X;
		y[t]=Y;
//		cout<<endl<<x[t]<<' '<<y[t]<<' '<<t<<endl<<endl;
		T=max(t,T);
//		if(!fa[X])fa[X]=X;
//		if(!fa[Y])fa[Y]=Y;
//		mergeSet(X,Y);
	}
	
	for(register int i=1;i<=T;i++)
	{
		if(fa[x[i]]==0)fa[x[i]]=x[i];
		if(fa[y[i]]==0)fa[y[i]]=y[i];
//		
//		cout<<"i:"<<i<<endl<<endl;		
//		cout<<"x[i]:"<<x[i]<<endl<<"y[i]:"<<y[i]<<endl<<endl;
//		cout<<"fa[x[i]]:"<<fa[x[i]]<<endl<<"fa[y[i]]:"<<fa[y[i]]<<endl<<endl;
//		
		mergeSet(x[i],y[i]);
		cout<<"fa[cnt]:"<<fa[cnt]<<endl<<endl;
		while(find(fa[cnt])==1)
		{
			cout<<"cnt:"<<cnt<<endl<<endl;
			cnt++;
			if(cnt==n)
			{
				cout<<i;
				return 0;
			}
		}
//		cout<<"cnt:"<<cnt<<endl<<endl;
	}
	cout<<-1;
	return 0;
}

就过一个节点,样例能过

剩下全部WA

2022/8/7 23:33
加载中...