Submission
Status:
[PPPPPPPPPP][PPPPPPPPPPPPPPPPPPPP]
Score: 100
User: Monasm
Problemset: E.Kingdom
Language: cpp
Time: 0.257 second
Submitted On: 2025-01-08 17:47:54
#include <bits/stdc++.h>
#define int long long int
#define pii pair<int,int>
using namespace std;
int find(vector<int> &p,int x){
if(p[x] == x)return x;
return p[x] = find(p,p[x]);
}
void join(vector<int> &p,int a,int b){
a = find(p,a);
b = find(p,b);
p[b] = a;
}
int32_t main(){
//ios_base::sync_with_stdio(0);cin.tie(0);
int n,m,k,ans,mina=1e18,maxb=0,cnt=0;cin>>n>>m>>k;
vector<int> p(n);
vector<pair<int,pii>> a,b;
for(int i=0;i<n;i++)p[i]=i;
for(int i=0;i<m;i++){
int u,v,w;cin>>u>>v>>w;
if(w>=k){
a.push_back({w,{u,v}});
mina=min(w,mina);
}
else{
b.push_back({w,{u,v}});
maxb=max(w,maxb);
}
}
sort(b.begin(),b.end());
for(int i=a.size()-1;i>=0;i--){
int w=a[i].first,u=a[i].second.first,v=a[i].second.second;
if(find(p,u)!=find(p,v)){
cnt++;
join(p,u,v);
}
}
if(cnt==n-1){
if(b.size()){
ans=abs(maxb-k)<=abs(mina-k)?abs(maxb-k)+(m-a.size()-1):abs(mina-k)+(m-a.size());
}
else{
ans=min(abs(mina-k),k)+(m-a.size());
}
cout<<ans;
return 0;
}
ans=0;
for(int i=b.size()-1;i>=0;i--){
int w=b[i].first,u=b[i].second.first,v=b[i].second.second;
if(find(p,u)!=find(p,v)){
join(p,u,v);
ans+=abs(w-k);
cnt++;
}
else{
ans++;
}
}
cout<<ans+((n-1-cnt)*k);
}