제출 #1196780

#제출 시각아이디문제언어결과실행 시간메모리
1196780Newtonabctimeismoney (balkan11_timeismoney)C++20
60 / 100
19 ms584 KiB
#include<bits/stdc++.h>
#define f first
#define s second
#define ll long long
using namespace std;
const int N=1e4+10;
int pa[300];
pair<pair<int,int>,pair<int,int>> edge[N];
bool con[N];
bool use[N];
int root(int x){if(pa[x]==x) return x; return pa[x]=root(pa[x]);}
int main(){
    int n,m;
    cin>>n >>m;
    for(int i=1;i<=n;i++) pa[i]=i;
    for(int i=0;i<m;i++){
        cin>>edge[i].f.f >>edge[i].f.s >>edge[i].s.f >>edge[i].s.s;
    }
    long long sa,sb;
    int cnt=0;
    sa=sb=0;
    while(cnt!=n-1){
        long long mn=LLONG_MAX,pick=0;
        for(int i=0;i<m;i++){
            if(con[i]) continue;
            auto [x,y]=edge[i];
            auto [u,v]=x;
            if(root(u)==root(v)){
                con[i]=true;
                continue;
            }
            long long nxt=(sa+(ll)edge[i].s.f)*(sb+(ll)edge[i].s.s);
            if(mn>nxt){
                mn=nxt;
                pick=i;
            }
        }
        con[pick]=true;
        pa[root(edge[pick].f.f)]=root(edge[pick].f.s);
        sa+=(ll)edge[pick].s.f,sb+=(ll)edge[pick].s.s;
        cnt++;
        use[pick]=true;
    }
    cout<<sa <<" " <<sb <<"\n";
    for(int i=0;i<m;i++){
        if(use[i]) cout<<edge[i].f.f <<" " <<edge[i].f.s <<"\n";
    } 

}
#Verdict Execution timeMemoryGrader output
Fetching results...