Submission
Status:
[-SSSSSSSSS][-SSSSSSSSSSSSSSSSSSS]
Score: 0
User: ftm
Problemset: E.Kingdom
Language: cpp
Time: 0.032 second
Submitted On: 2025-03-17 13:20:01
#include<bits/stdc++.h>
using namespace std;
#define f(i,a,b,c) for(int i=a;i<=b;i+=c)
#define r(i,a,b,c) for(int i=a;i>=b;i-=c)
#define fi first
#define se second
#define pb push_back
using ll=long long int;
using pii=pair<int,int>;
const int N=1e5+5;
const int M=1e9+7;
int pa[N];
ll c;
ll ans=0;
vector<array<int,3>> p;
int find(int x){
if(x==pa[x]) return x;
return pa[x]=find(pa[x]);
}
void uset(int a, int b, int w){
a=find(a), b=find(b);
if(a==b) return;
pa[b]=a;
c++;
ans+=w;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n,m,k;cin>>n>>m>>k;
f(i,1,n,1) pa[i]=i;
int mn=1e9,mx=-1000000000;
f(i,1,m,1){
int u,v,w;cin>>u>>v>>w;
if(w>=k) {
uset(u,v,0);
mn=min(mn,w);
}
else {
p.pb({k-w,u,v});
mx=max(mx,w);
}
}
if(c==n-1){
if(p.size()) ans+=min(mn-k,k/*add new k road*/);
else ans+=min(mn-k,k-mx-1/*-1 don't destroy mx road'*/);
ans+=p.size();
cout<<ans;
return 0;
}
int cnt=0;
sort(p.begin(),p.end());
for(auto e:p){
int w=e[0],u=e[1],v=e[2];
uset(u,v,w);
}
ans+=(1ll*k*(n-1-c));
cout<<ans;
}