Submission #580629

#TimeUsernameProblemLanguageResultExecution timeMemory
580629Lobotimeismoney (balkan11_timeismoney)C++17
50 / 100
111 ms65536 KiB
#include<bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18 + 10; const int inf1 = (int) 1e9 + 10; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() const int maxn = 220; int n, m, ds[maxn], dsz[maxn], mark[maxn]; pair<int,pair<int,int>> ans; vector<pair<pair<int,int>,pair<int,int>>> edg; vector<pair<int,int>> ansv; int find(int u) { if(u == ds[u]) return u; return ds[u] = find(ds[u]); } void join(int u, int v) { if(dsz[u] < dsz[v]) swap(u,v); dsz[u]+= dsz[v]; ds[v] = u; } pair<int,int> mst(dbl c1, dbl t1) { for(int i = 1; i <= n; i++) { ds[i] = i; dsz[i] = 1; } for(int i = 1; i <= m; i++) mark[i] = 0; int C = 0; int T = 0; vector<pair<int,int>> curv; while(curv.size() != n-1) { pair<dbl,int> cur = mp(inf,inf); for(int i = 0; i < edg.size(); i++) { int u = find(edg[i].fr.fr); int v = find(edg[i].fr.sc); if(u == v || mark[i]) { mark[i] = 1; continue; } int c = edg[i].sc.fr; int t = edg[i].sc.sc; cur = min(cur,mp(c1*c+t1*t,i)); } int id = cur.sc; mark[id] = true; int u = find(edg[id].fr.fr); int v = find(edg[id].fr.sc); int c = edg[id].sc.fr; int t = edg[id].sc.sc; if(u != v) { join(u,v); curv.pb(mp(edg[id].fr.fr,edg[id].fr.sc)); C+= c; T+= t; } } if(ans.fr > C*T) { ans.fr = C*T; ans.sc = mp(C,T); ansv = curv; } // cout << " " << c1 << " " << t1 << " " << C << " " << T << endl; return mp(C,T); } void dec(int cl, int tl, int cr, int tr) { // cout << cl << " " << tl << " " << cr << " " << tr << endl; int dc = cr-cl; // > 0 int dt = tr-tl; // < 0 dbl sz = sqrt(dc*dc + dt*dt); auto aux = mst(dt/sz,-dc/sz); int c = aux.fr; int t = aux.sc; if(c == cl || c == cr) return; dec(cl,tl,c,t); dec(c,t,cr,tr); } void solve() { cin >> n >> m; for(int i = 1; i <= m; i++) { int u,v,c,t; cin >> u >> v >> c >> t; u++; v++; edg.pb(mp(mp(u,v),mp(c,t))); } ans.fr = inf; pair<int,int> aux; aux = mst(0,1); int c0 = aux.fr; int t0 = aux.sc; aux = mst(1,0); int c1 = aux.fr; int t1 = aux.sc; dec(c0,t0,c1,t1); cout << ans.sc.fr << " " << ans.sc.sc << endl; for(auto x : ansv) { cout << x.fr-1 << " " << x.sc-1 << endl; } } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); // freopen("in.in", "r", stdin); // freopen("out.out", "w", stdout); int tt = 1; // cin >> tt; while(tt--) { solve(); } }

Compilation message (stderr)

timeismoney.cpp: In function 'std::pair<long long int, long long int> mst(long double, long double)':
timeismoney.cpp:42:23: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   42 |     while(curv.size() != n-1) {
      |           ~~~~~~~~~~~~^~~~~~
timeismoney.cpp:44:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<std::pair<long long int, long long int>, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         for(int i = 0; i < edg.size(); i++) {
      |                        ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...