Submission #845249

#TimeUsernameProblemLanguageResultExecution timeMemory
845249alexddtimeismoney (balkan11_timeismoney)C++17
30 / 100
2089 ms600 KiB
#include<bits/stdc++.h> using namespace std; int n,m; pair<pair<int,int>,pair<int,int>> edges[10005]; double cst; bool caz; int father[300]; int siz[300]; int gas(int x) { if(x!=father[x]) father[x]=gas(father[x]); return father[x]; } void unite(int x, int y) { x = gas(x); y = gas(y); if(x==y) return; if(siz[x]<siz[y]) swap(x,y); father[y]=x; siz[x]+=siz[y]; } double calc(pair<pair<int,int>,pair<int,int>> x) { if(caz) return (double)x.first.first * cst + (double)x.first.second; else return (double)x.first.first + (double)x.first.second * cst; } bool cmp(pair<pair<int,int>,pair<int,int>> x, pair<pair<int,int>,pair<int,int>> y) { return calc(x) < calc(y); } int best0,best1; vector<pair<int,int>> sol; vector<pair<int,int>> cur; long long solve(double x) { cst = x; cur.clear(); sort(edges,edges+m,cmp); int sum0=0,sum1=0; for(int i=0;i<n;i++) father[i]=i,siz[i]=1; for(int i=0;i<m;i++) { if(gas(edges[i].second.first)!=gas(edges[i].second.second)) { unite(edges[i].second.first,edges[i].second.second); cur.push_back(edges[i].second); sum0+=edges[i].first.first; sum1+=edges[i].first.second; } } if(best0==-1 || 1LL*sum0*sum1 < 1LL*best0*best1) { sol = cur; best0=sum0; best1=sum1; } return best0*best1; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; for(int i=0;i<m;i++) { cin>>edges[i].second.first>>edges[i].second.second>>edges[i].first.first>>edges[i].first.second; } double st,dr,mij1,mij2; best0=-1; for(int x=1;x<=2600000;x+=5000)///it1 { caz=1; st = x; dr = x+999; for(int i=0;i<100;i++)///it2 { mij1=st+(dr-st)/3; mij2=mij1+(dr-st)/3; if(solve(mij1)<solve(mij2)) dr=mij2; else st=mij1; } caz=0; st = x; dr = x+999; for(int i=0;i<100;i++) { mij1=st+(dr-st)/3; mij2=mij1+(dr-st)/3; if(solve(mij1)<solve(mij2)) dr=mij2; else st=mij1; } } cout<<best0<<" "<<best1<<"\n"; for(int i=0;i<sol.size();i++) cout<<sol[i].first<<" "<<sol[i].second<<"\n"; return 0; } /** it1 * it2 <= 10000 */

Compilation message (stderr)

timeismoney.cpp: In function 'int main()':
timeismoney.cpp:104:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |     for(int i=0;i<sol.size();i++)
      |                 ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...