求助,此题为何不能使用如下生成树代码
查看原帖
求助,此题为何不能使用如下生成树代码
473531
zpw_bth楼主2023/3/15 17:20

RT,10ptsWART,10pts WA

#include<iostream>
#include<algorithm>
using namespace std;
int n,m,d,u,v,dsyu,dsyv,len,minn,s,t,fa[100001];


struct data{
	int u;
	int v;
	int w;
	bool flag;
}e[100001],newe[100001];


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


bool cmp(data a,data b){
	return a.w<b.w;
}


void kruskal(){
	for(int i=1;i<=len;i++){
		if(find(s)==find(t)){
			return ;
		}
		int u=find(newe[i].u);
		int v=find(newe[i].v);
		if(u!=v){
			fa[u]=v;
			minn+=newe[i].w;
		}
		
	}
}



int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>e[i].u>>e[i].v>>e[i].w;
		if(e[i].u>e[i].v){
			swap(e[i].u,e[i].v);
		}
		e[i].flag=true;
	}
	cin>>d;
	for(int i=1;i<=d;i++){
		cin>>dsyu>>dsyv;
		if(dsyu>dsyv){
			swap(dsyu,dsyv);
		}
		for(int j=1;j<=m;j++){
			if(e[j].u==dsyu&&e[j].v==dsyv){
				e[j].flag=false;
				newe[++len]=e[j];
			}
		}
	}
	cin>>s>>t;
	sort(newe+1,newe+len+1,cmp);
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		if(e[i].flag){
			int u=find(e[i].u);
			int v=find(e[i].v);
			if(u!=v){
				fa[u]=v;
			}
		}
	}
	kruskal();
	cout<<minn;
}
2023/3/15 17:20
加载中...