| 比赛 |
ICPC复现(AI数据) |
评测结果 |
AAAAA |
| 题目名称 |
最小生成图 |
最终得分 |
100 |
| 用户昵称 |
李金泽 |
运行时间 |
0.120 s |
| 代码语言 |
C++ |
内存使用 |
4.01 MiB |
| 提交时间 |
2026-05-26 21:34:05 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define N 3005
#define M 5005
#define int long long
#define ui unsigned
#define ul unsigned long long
#define db double
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define rf(i,r,l) for(int i=r;i>=l;i--)
#define mem(x) memset(x,0,sizeof(x));
using namespace std;
int T,n,m,k,f[N],op,x,y,z;
db ans=1e15,sum;
struct edge{int u,v,w;bool f;bool operator<(edge y){return w<y.w;}}e[M];
void swap(int &x,int &y){int t=x;x=y;y=t;}
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int fd(int x){return x^f[x]?f[x]=fd(f[x]):x;}
void mg(int x,int y){f[fd(x)]=fd(y);}
int read(){
int sum=0;bool f=0;char c=getchar();
for(;c<48||c>57;c=getchar())if(c==45)f=1;
for(;c>=48&&c<=57;c=getchar())sum=sum*10+(c&15);
return f?-sum:sum;
}
signed main(){
freopen("tu.in","r",stdin);freopen("tu.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
n=read();m=read();
fo(i,1,m)e[i]={read(),read(),read(),0};
sort(e+1,e+m+1);
fo(i,1,n)f[i]=i;
fo(i,1,m){
x=e[i].u;y=e[i].v;
if(fd(x)==fd(y))continue;
mg(x,y);
e[i].f=1;
}
fo(i,1,m)
if(!e[i].f){
e[i].f=1;
k=0;sum=0;
fo(j,1,m){
if(!e[j].f)continue;
k++;sum+=(db)e[j].w/k;
}
ans=min(ans,sum);
}
printf("%.0lf",ans);
return 0;
}