Submission #854353

#TimeUsernameProblemLanguageResultExecution timeMemory
854353abcvuitunggioHighway Tolls (IOI18_highway)C++17
51 / 100
122 ms10228 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; int M,d[90001][2],type[90001],S,T; vector <int> ke[90001]; vector <pair <int, int>> a,b; queue <int> q; void bfs(int s, int i){ d[s][i]=0; q.push(s); while (!q.empty()){ int u=q.front(); q.pop(); for (int v:ke[u]) if (d[v][i]==-1){ d[v][i]=d[u][i]+1; q.push(v); } } } void find_pair(int N, vector<int> U, vector<int> V, int A, int B){ M=U.size(); memset(d,-1,sizeof(d)); vector <int> w(M,0); long long dist=ask(w); int l=0,r=M-1,kq=-1; while (l<=r){ int mid=(l+r)>>1; for (int i=0;i<=mid;i++) w[i]=1; if (ask(w)>dist){ kq=mid; r=mid-1; } else l=mid+1; for (int i=0;i<=mid;i++) w[i]=0; } for (int i=kq+1;i<M;i++){ ke[U[i]].push_back(V[i]); ke[V[i]].push_back(U[i]); } bfs(U[kq],0); bfs(V[kq],1); for (int i=0;i<N;i++){ if (d[i][0]==-1&&d[i][1]==-1) continue; if (d[i][0]==-1) d[i][0]=1e9; if (d[i][1]==-1) d[i][1]=1e9; if (d[i][1]>d[i][0]+1) type[i]=1; if (d[i][0]>d[i][1]+1) type[i]=2; } for (int i=kq+1;i<M;i++){ if (type[U[i]]==1&&type[V[i]]==1) a.emplace_back(max(d[U[i]][0],d[V[i]][0]),i); if (type[U[i]]==2&&type[V[i]]==2) b.emplace_back(max(d[U[i]][1],d[V[i]][1]),i); } sort(a.begin(),a.end()); sort(b.begin(),b.end()); int tmp=kq; l=0,r=a.size()-1,kq=-1; while (l<=r){ int mid=(l+r)>>1; for (int i=mid;i<a.size();i++) w[a[i].second]=1; if (ask(w)>dist){ kq=a[mid].second; l=mid+1; } else r=mid-1; for (int i=mid;i<a.size();i++) w[a[i].second]=0; } S=(kq==-1?U[tmp]:(d[U[kq]][0]>d[V[kq]][0]?U[kq]:V[kq])); l=0,r=b.size()-1,kq=-1; while (l<=r){ int mid=(l+r)>>1; for (int i=mid;i<b.size();i++) w[b[i].second]=1; if (ask(w)>dist){ kq=b[mid].second; l=mid+1; } else r=mid-1; for (int i=mid;i<b.size();i++) w[b[i].second]=0; } T=(kq==-1?V[tmp]:(d[U[kq]][1]>d[V[kq]][1]?U[kq]:V[kq])); answer(S,T); }

Compilation message (stderr)

highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:70:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |         for (int i=mid;i<a.size();i++)
      |                        ~^~~~~~~~~
highway.cpp:78:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |         for (int i=mid;i<a.size();i++)
      |                        ~^~~~~~~~~
highway.cpp:85:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for (int i=mid;i<b.size();i++)
      |                        ~^~~~~~~~~
highway.cpp:93:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |         for (int i=mid;i<b.size();i++)
      |                        ~^~~~~~~~~
#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...