제출 #933856

#제출 시각아이디문제언어결과실행 시간메모리
933856kim통행료 (IOI18_highway)C++17
51 / 100
151 ms12800 KiB
#include "highway.h" #include<bits/stdc++.h> using namespace std; #define eb emplace_back using ll=long long; using pii=pair<int,int>; #define f first #define s second pii edge[130005]; vector<pii> graph[90005]; vector<int> tmp,ans; ll mn_ask,dist; bitset<90005> vis; void solve2(int U){ queue<pii> q; q.emplace(U,0); vis=0; vis[U]=1; vector<int> tmp2(tmp.size(),1); vector<pii> vec; while(q.size()){ auto [u,d]=q.front(); q.pop(); for(auto &[v,id]:graph[u]){ if(vis[v]) continue; if(d+1<dist) q.emplace(v,d+1), tmp2[id]=0; else if(d+1==dist) vec.eb(v,id); vis[v]=1; } } int l=0,r=vec.size(); while(l<r){ int mid=l+r>>1; tmp=tmp2; for(int i=0;i<=mid;++i) tmp[vec[i].s]=0; if(ask(tmp)==mn_ask) r=mid; else l=mid+1; } ans.eb(vec[l].f); } int pre[90005]; void play(int n,vector<int> &U,vector<int> &V,int u0){ vis=0; int m=U.size(); int id=0; { queue<int> q; q.emplace(u0); vis[u0]=1; while(q.size()){ int u=q.front(); q.pop(); pre[u]=++id; for(auto &[v,id]:graph[u]){ if(vis[v]) continue; vis[v]=1; q.emplace(v); } } } int l=1,r=id; while(l<r){ int mid=l+r>>1; for(int i=0;i<m;++i){ if(pre[U[i]]<=mid&&pre[V[i]]<=mid) tmp[i]=0; else tmp[i]=1; } if(ask(tmp)==mn_ask) r=mid; else l=mid+1; } for(int i=0;i<n;++i){ if(pre[i]==l){ ans.eb(i); break; } } } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { for(int i=0;i<U.size();++i){ edge[i]={U[i],V[i]}; graph[U[i]].eb(V[i],i); graph[V[i]].eb(U[i],i); } tmp.assign(U.size(),0); mn_ask=ask(tmp), dist=mn_ask/A; play(N,U,V,0); solve2(ans[0]); answer(ans[0],ans[1]); }

컴파일 시 표준 에러 (stderr) 메시지

highway.cpp: In function 'void solve2(int)':
highway.cpp:34:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   34 |         int mid=l+r>>1;
      |                 ~^~
highway.cpp: In function 'void play(int, std::vector<int>&, std::vector<int>&, int)':
highway.cpp:64:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   64 |   int mid=l+r>>1;
      |           ~^~
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:81:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for(int i=0;i<U.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...