Submission #207614

#TimeUsernameProblemLanguageResultExecution timeMemory
207614junodevelopertimeismoney (balkan11_timeismoney)C++17
75 / 100
2090 ms1784 KiB
#include <bits/stdc++.h>
#define sz(x) ((int)x.size())
#define fi first
#define se second
#define pb push_back
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
struct edge {
	int u,v;
	int v1,v2;
	ll val;
	bool operator<(const edge& b)const {
		return val<b.val;
	}
};
int n,m;
int par[210];
ll a1=1e6,a2=1e6;
vector<edge> e,rv;
int pn(int u){return u==par[u]?u:(par[u]=pn(par[u]));}
void us(int a,int b) {
	a=pn(a),b=pn(b);
	par[b]=a;
}
pll f(pll p) {
	for(int i=0;i<=n;i++)par[i]=i;
	for(auto& it:e)it.val=it.v1*p.fi+it.v2*p.se;
	sort(e.begin(),e.end());
	ll s1=0,s2=0;
	vector<edge> r;
	for(auto& it:e) {
		if(pn(it.u)!=pn(it.v)) {
			us(it.u,it.v);
			s1+=it.v1;
			s2+=it.v2;
			r.pb(it);
		}
	}
	if(s1*s2<a1*a2) {
		a1=s1,a2=s2;
		rv=r;
	}
	return {s1,s2};
}
int dbg;
void solve(pll p1,pll p2) {
	if(p1==p2)return;
	pll v(p1.se-p2.se,p2.fi-p1.fi);
	pll p=f(v);
	if(p==p1||p==p2)return;
	solve(p1,p);solve(p,p2);
}
int main() {
	ios::sync_with_stdio(stdin);cin.tie(0);
	cin>>n>>m;
	for(int i=0;i<m;i++) {
		int x,y,v1,v2;
		cin>>x>>y>>v1>>v2;
		e.pb({x,y,v1,v2});
	}
	pll p1=f({1,0});
	pll p2=f({0,1});
	solve(p1,p2);
	cout<<a1<<' '<<a2<<'\n';
	for(auto& it:rv)cout<<it.u<<' '<<it.v<<'\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...