MLE??!!
查看原帖
MLE??!!
799098
chengzihan620楼主2024/4/19 19:51
#include<bits/stdc++.h> 
using namespace std;
inline int rd(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+c-'0';c=getchar();}return x*f;}
struct AC{int u,v,w,use,idx;}e[6010];
int n,m,w,f[210],ans[6010];
bool cmp(AC x,AC y){return x.w<y.w;}
void add(int x,int y,int z,int i){
	m++;e[m].u=x;e[m].v=y;e[m].w=z;e[m].use=0;e[m].idx=i;
}
int find(int x){
	if(f[x]!=x)return f[x]=find(f[x]);
}
int del(int x){
	int i=1;while(e[i].idx!=x)i++;
	e[i].idx=-1;return i;
}
int kruscal(){
	int res=0,tot=0;
	for(int i=1;i<=n;i++)f[i]=i;
	for(int i=1;i<m;i++)
		if(e[i+1].w<e[i].w)
			swap(e[i],e[i+1]);
	for(int i=1;i<=m;i++){
		int fx=find(e[i].u),fy=find(e[i].v);
		if(fx==fy||e[i].idx==-1)continue;f[fx]=fy;
		e[i].use=1;tot++;res+=e[i].w;
		if(tot==n-1)break;
	}
	return res;
}
signed main(){
	n=rd();w=rd();
	for(int i=1,x,y,z;i<=w;i++){
		x=rd();y=rd();z=rd();
		add(x,y,z,i);
	}
	sort(e+1,e+m+1,cmp);
	ans[w]=kruscal();
	for(int i=w-1;i>=1;i--){
		if(i<n){ans[i]=-1;continue;}
		int t=del(i+1);
		if(e[t].use||i==w)ans[i]=kruscal();
		else ans[i]=ans[i+1];	
	}
	for(int i=1;i<=w;i++)
		cout<<ans[i]<<endl;
	return 0;
}
2024/4/19 19:51
加载中...