```cpp
#include<bits/stdc++.h>
using namespace std;
#define rank xzy
const int N=1e5+1;
const int M=3e5+1;
int cnt=0;long long sum=0;
struct edge{
int u,v,w;
}e[M];
bool cmp(edge a,edge b){return a.w<b.w;}
int n,m;
int fa[N],rank[N],vis[N],pre[N],con[5000][5000];
queue<edge>q;
inline int find(int x){
if(fa[x]==x)return x;
else return find(fa[x]);
}
inline void merge(int u,int v,int w){
u=find(u);v=find(v);
if(rank[u]<rank[v]){
fa[u]=v;
pre[u]=w;
}
else{
fa[v]=u;
pre[v]=w;
if(rank[u]==rank[v])rank[u]++;
}
}
inline void init(){
for(int i=1;i<=n;i++){
fa[i]=i;rank[i]=0;vis[i]=-1;
}
sort(e+1,e+cnt+1,cmp);
for(int i=1;i<=cnt;i++){
int u=find(e[i].u);int v=find(e[i].v);
if(u==v)
q.push(edge{e[i].u,e[i].v,e[i].w});
else{
sum+=e[i].w;
merge(u,v,e[i].w);
}
}
}
inline int query(int s,int t,int x){
if(find(s)!=find(t))return -0x3f3f3f3f;
int ans=-3,mx2=-4;
int k=s;
while(1){
vis[k]=ans;
if(fa[k]==k)break;
if(pre[k]>ans)mx2=ans,ans=pre[k];
else{
if(pre[k]>mx2)mx2=pre[k];
}
k=fa[k];
}
ans=-3;k=t;
int ans2=-56;
while(1){
if(vis[k]>=0){
if(vis[k]>ans){
ans2=max(mx2,ans);ans=vis[k];
}
else{
ans2=max(ans2,vis[k]);
}
break;
}
if(fa[k]==k)break;
if(pre[k]>ans)ans2=ans,ans=pre[k];
else{
if(pre[k]>ans2)ans2=pre[k];
}
k=fa[k];
}
k=s;
while(1){
vis[k]=-1;
if(fa[k]==k)break;
k=fa[k];
}
if(ans!=x)return ans;
else return ans2;
}
inline long long min(int a,long long b){
if(a>b)return b;
else return a;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
++cnt;
cin>>e[cnt].u>>e[cnt].v>>e[cnt].w;
if(e[cnt].u==e[cnt].v)cnt--;
}
init();
long long mn=0x3f3f3f3f3f3f3f3f;
while(!q.empty()){
edge t=q.front();q.pop();
int u=t.u;int v=t.v;
int temp;
temp=t.w-query(u,v,t.w);
if(temp==0)continue;
mn=min(mn,temp);
}
cout<<sum+mn;
return 0;
}
不知道为什么其他数据都能过,就是#1过不了