Submission #298627

#TimeUsernameProblemLanguageResultExecution timeMemory
298627DanerZeinHighway Tolls (IOI18_highway)C++14
Compilation error
0 ms0 KiB
#include "highway.h" #include <bits/stdc++.h> #define MAX 1000000000000000000 using namespace std; typedef long long ll; typedef pair<ll,ll> ii; typedef vector<ii> vi; vector<vi> G; vector<int> hl; ll conc[110]; int isq[110]; ll m,a,b,n; ll dis[110]; void dijkstra(int x){ memset(isq,0,sizeof isq); for(int i=0;i<n;i++) dis[i]=MAX; dis[x]=0; priority_queue<ii,vector<ii>,greater<ii>>pq; pq.push(ii(0,x)); while(!pq.empty()){ int u=pq.top().second; isq[u]=0; pq.pop(); for(auto &v:G[u]){ ll cos; if(hl[v.second]==1) cos=b; else cos=a; if(dis[v.first]>dis[u]+cos){ dis[v.first]=dis[u]+cos; if(!isq[v.first]){ pq.push(ii(dis[v.first],v.first)); isq[v.first]=1; } } } } } vector<int> path; int vis[90010]; void dfs(int u){ path.push_back(u); vis[u]=1; for(auto &v:G[u]){ if(!vis[v]) dfs(v); } } void line_graph(int u){ memset(vis,0,sizeof vis); dfs(u); hl.assign(m,0); int w=ask(hl); int no=w/a; int l=-1,r=m; while(r-l>1){ int mid=(l+r)/2; for(int i=0;i<mid;i++) hl[i]=1; for(int i=mid;i<m;i++) hl[i]=0; if(ask(hl)!=w) r=mid; else l=mid; } int u=path[l]; int v=path[l+no]; answer(u,v); } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { n=N; a=A; b=B; G.resize(N+1); for(int i=0;i<U.size();i++){ int u=U[i],v=V[i]; G[u].push_back(ii(v,i)); G[v].push_back(ii(u,i)); } bool sw=0; int id=-1; for(int i=0;i<N;i++){ if(G[i].size()>2) sw=1; if(G[i].size()==1) id=i; } m=U.size(); if(sw==1){ memset(conc,0,sizeof conc); hl.assign(m,0); for(int i=0;i<m;i++){ hl[i]=1; dijkstra(0); ll co=ask(hl); for(int j=0;j<N;j++){ if(dis[j]==co){ conc[j]++; } } hl[i]=0; } ll t,ma=-1; for(int i=0;i<N;i++){ if(conc[i]>ma){ ma=conc[i]; t=i; } } answer(0,t); } else{ line_graph(id); } }

Compilation message (stderr)

highway.cpp: In function 'void dfs(int)':
highway.cpp:44:12: error: no match for 'operator[]' (operand types are 'int [90010]' and 'std::pair<long long int, long long int>')
   44 |     if(!vis[v]) dfs(v);
      |            ^
highway.cpp:44:21: error: cannot convert 'std::pair<long long int, long long int>' to 'int'
   44 |     if(!vis[v]) dfs(v);
      |                     ^
      |                     |
      |                     std::pair<long long int, long long int>
highway.cpp:40:14: note:   initializing argument 1 of 'void dfs(int)'
   40 | void dfs(int u){
      |          ~~~~^
highway.cpp: In function 'void line_graph(int)':
highway.cpp:61:7: error: declaration of 'int u' shadows a parameter
   61 |   int u=path[l];
      |       ^
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:70:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |   for(int i=0;i<U.size();i++){
      |               ~^~~~~~~~~