#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=201;
struct info{
int u,v,t,c;
friend bool operator< (info a, info b) {
return a.t<b.t;
}
};
int par[N],sz[N];
int find(int x){
return par[x]=(x==par[x]?x:find(par[x]));
}
void merge(int a,int b){
a=find(a);
b=find(b);
if(a==b)return;
if(sz[a]>sz[b])swap(a,b);
par[a]=b;
sz[b]+=sz[a];
}
signed main(){
int n,m; cin>>n>>m;
info a[m];
for(int i=0;i<m;i++){
cin>>a[i].u>>a[i].v>>a[i].t>>a[i].c;
par[a[i].u]=a[i].u; par[a[i].v]=a[i].v;
sz[a[i].u]=1; sz[a[i].v]=1;
}
sort(a,a+m);
int ans=0,ans2=0,ans3=0;
vector<pair<int,int>> vec;
for(int i=0;i<m;i++){
if(find(a[i].u)==find(a[i].v))continue;
ans2+=a[i].t; ans3+=a[i].c;
ans+=a[i].t;
merge(a[i].u,a[i].v);
vec.pb({a[i].u,a[i].v});
}
cout<<ans2<<' '<<ans3<<endl;
for(auto i:vec)cout<<i.first<<' '<<i.second<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |