Submission #1141853

#TimeUsernameProblemLanguageResultExecution timeMemory
1141853Abdullah_Alodaibitimeismoney (balkan11_timeismoney)C++20
55 / 100
4 ms968 KiB
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
struct edge{
    ll t,c,x,y;
};
struct dsus{
    ll boss,size;
};
dsus dsu[205]={};
dsus find(ll a){
    if(dsu[a].boss==a)return dsu[a];
    return dsu[a]=find(dsu[a].boss);
}
void connect(ll x,ll y){
    ll a=find(x).boss,b=find(y).boss;
    if(dsu[a].boss!=dsu[b].boss){
        if(dsu[a].size<dsu[b].size)swap(a,b);
        dsu[b].boss=dsu[a].boss;
        dsu[a].size+=dsu[b].size;
        dsu[b]=dsu[a];
    }
}
ll val(edge a){
    double x=abs(a.c-a.t)/a.c+a.t;
    return a.c+a.t-(x/10);
}
bool cmp(edge a,edge b){
    return val(a)<val(b);
}
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll n,m,tt=0,cc=0;
    cin>>n>>m;
    vector<edge> v;
    vector<pair<ll,ll>> ans;
    for(int i=0;i<m;i++){
        ll x,y,t,c;
        
        cin>>x>>y>>t>>c;
        v.push_back({t,c,x,y});
    }
    for(int i=0;i<n;i++)dsu[i]={i,1};
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<m;i++){
        if(find(v[i].x).boss!=find(v[i].y).boss){
            connect(v[i].x,v[i].y);
            ans.push_back({v[i].x,v[i].y});
            cc+=v[i].c;tt+=v[i].t;
        }
        if(ans.size()==n-1)break;
    }
    cout<<tt<<" "<<cc<<"\n";
    for(int i=0;i<ans.size();i++){
        cout<<ans[i].first<<" "<<ans[i].second<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...