tle55求调
查看原帖
tle55求调
371927
REAL_曼巴楼主2022/3/17 15:14
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e2+5;
const int maxm = 6e3+5;
struct node{
	int u,v,val;
}e[maxm],c[maxm];
int n,m;
int fa[maxn],a[maxm];
void init(){
	for(int i=1;i<=n;i++)	fa[i]=i;
	return ;
}
bool cmp(node x,node y){
	return x.val<y.val;
}
int find(int x){
	if(x!=fa[x])	fa[x]=find(fa[x]);
	return fa[x];
}
void kruskal(int x){
	for(int i=1;i<=x;i++)
		e[i].u=c[i].u,e[i].v=c[i].v,e[i].val=c[i].val;
	sort(e+1,e+x+1,cmp);
	int cnt=0,now=0;
	for(int i=1;i<=x;i++){
		int u=find(e[i].u);
		int v=find(e[i].v);
		if(u==v)	
            continue;
		fa[u]=v,now+=e[i].val,cnt++;
	}
	if(cnt==n-1)a[x]=min(a[x],now);
	else a[x]=-1;
}
int main(){
	memset(a,0x3f,sizeof a);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
		scanf("%d%d%d",&c[i].u,&c[i].v,&c[i].val);
	for(int i=m;i>=1;i--){
		init();
		kruskal(i);
	}
	for(int i=1;i<=m;i++)
		printf("%d\n",a[i]);
	return 0;
}


/*
10 30
1 10 8527
6 9 284
1 9 8396
1 4 188
4 7 4087
4 10 2768
6 8 4829
1 3 312
7 9 3952
3 4 8335
4 5 7747
4 8 312
2 9 55
8 9 5914
2 5 8505
3 9 1274
8 10 2103
3 10 1836
2 4 4422
6 7 7097
3 8 5189
5 10 4144
5 9 1407
3 6 6172
2 7 4835
3 7 3689
7 8 7572
2 8 9319
1 5 4096
2 3 4714








-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
19705
19705
19705
16892
16227
15960
15960
15960
15960
12357
9620
9620
9620
9357
9357
9357
9357
9357

*/
2022/3/17 15:14
加载中...