Submission #594346

#TimeUsernameProblemLanguageResultExecution timeMemory
594346TimDeeHighway Tolls (IOI18_highway)C++14
18 / 100
141 ms8760 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; void _7pts(int n, int b, int d) { int l=0, r=n-2; vector<int> scuza(n-1,1), paiu; while (l<r) { paiu = scuza; int mid=(l+r)/2; for (int i=l; i<=mid; ++i) paiu[i]=0; int x=ask(paiu); if (x<b*d) r=mid; else l=mid+1; } //cout<<r<<' '<<r+d<<'\n'; answer(r,r+d); } void find_pair(int n, vector<int>u, vector<int> v, int a, int b) { int m=u.size(); vector<int> paiu(m,1); int dist=ask(paiu)/b; vector<vector<pair<int,int>>> adj(n); for (int i=0; i<m; ++i) { adj[u[i]].push_back({v[i],i}); adj[v[i]].push_back({u[i],i}); } int foo=1; for (int i=0; i<m; ++i) foo&=(u[i]+1==v[i]); if (foo) { _7pts(n,b,dist); return; } queue<int> q; q.push(0); vector<int> d(n,0); vector<int> D; vector<int> vis(n,0); vis[0]=1; while (!q.empty()) { int u=q.front(); q.pop(); for (auto it:adj[u]) { int v=it.first; if (!vis[v]) { d[v]=d[u]+1; q.push(v); vis[v]=1; } } } for (int i=0; i<n; ++i) { if (d[i]==dist) D.push_back(i); } int l=0, r=D.size()-1; vector<int> scuza(m,1); while (l<r) { int mid=(l+r+1)/2; paiu=scuza; for (int i=l; i<mid; ++i) { for (auto it:adj[D[i]]) { paiu[it.second]=0; } } int x=ask(paiu); if (x<dist*b) r=mid-1; else l=mid; } answer(0,D[r]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...