求助,5#TLE
查看原帖
求助,5#TLE
1068071
wangft楼主2024/5/27 19:57
#include<iostream>
#include<algorithm>
#include<stdio.h> 
using namespace std;
int n,m,kk,ans[100100][4],u[100100],ii;
struct node{
	int x,y,z;
}a[100100];
bool cmp(node a,node b){
	return a.z>b.z;
}
bool cmop(node a,node b){
	return a.z<b.z;
}
void ufs(int x,int y){
	while(u[x]!=0) x=u[x];
	while(u[y]!=0) y=u[y];
	if(x!=y) {
	u[y]=x;
	ii=1;
	}
}
int main(){
	int i,j,k=0,p=0,an=0,gg;
	scanf("%d%d%d",&n,&m,&kk);
	gg=m;
	for(i=1;i<=m;i++)
	scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
	sort(a+1,a+m+1,cmp);
	for(i=1;i<=m;i++){
		ii=0;
		ufs(a[i].x,a[i].y);
	if(ii==1){
		p++;
		if(a[i].z==0){
			an++;
			ans[an][1]=a[i].x;
			ans[an][2]=a[i].y;
			ans[an][3]=a[i].z;
		}
		if(p==n-1) break; 
	}
	
	}
	if(an>kk||p<n-1){
		cout<<"no solution"<<endl; return 0;
	}
	for(i=1;i<=n;i++) u[i]=0;
	for(i=1;i<=an;i++){
		ufs(ans[i][1],ans[i][2]);
	}
	p=an;
	k=0;
	int o=an;
	sort(a+1,a+1+m,cmop);
    for(i=1;i<=m;i++){
		ii=0;
		if(o<kk||a[i].z==1) {
		ufs(a[i].x,a[i].y);
	    if(ii==1){
		p++;
		if(a[i].z==0) o++;
			an++;
			ans[an][1]=a[i].x;
			ans[an][2]=a[i].y;
			ans[an][3]=a[i].z;
		if(p==n-1) break; 
	}
}
	} 
	if(o<kk||p<n-1) cout<<"no solution"<<endl;
	else for(i=1;i<=n-1;i++)
	printf("%d %d %d\n",ans[i][1],ans[i][2],ans[i][3]);
} 

2024/5/27 19:57
加载中...