제출 #139411

#제출 시각아이디문제언어결과실행 시간메모리
139411wilwxk통행료 (IOI18_highway)C++14
12 / 100
566 ms262148 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=9e4+5; vector<int> g[MAXN], config; vector<int> bons; int aresta[MAXN*2][2]; int pid[MAXN], lvl[MAXN]; bool ruim[MAXN]; int n, m, x, y; ll tam; void pinta(int ini, int fim, int k) { if(fim<ini||ini<0) return; for(int i=ini; i<=fim; i++) config[pid[bons[i]]]=k; } void dfs(int cur, int pp, int d) { pid[cur]=pp; lvl[cur]=d; for(auto vid : g[cur]) { if(vid==pp) continue; int viz= aresta[vid][ aresta[vid][0]==cur ]; dfs(viz, vid, d+1); } } // int divide(int cur) { // return 1; // for(auto vid : g[cur]) { // } // } // int conquer(int cur) { // } void acaba() { if(bons.size()==1) { answer(bons[0], 0); return; } // for(auto cur : bons) printf("bb %d (%d)\n", cur, pid[cur]); cout << endl; vector<int> aux; int mid=(bons.size()-1)/2; pinta(0, mid, 1); ll val=ask(config); // for(auto cur : config) printf("%d ", cur); printf(">> %d %lld %lld\n", mid, val, tam); if(val==tam) { for(int i=mid+1; i<bons.size(); i++) aux.push_back(bons[i]); bons.clear(); for(auto cur : aux) bons.push_back(cur); } else if(val==tam+(y-x)) { for(int i=0; i<=mid; i++) aux.push_back(bons[i]); bons.clear(); for(auto cur : aux) bons.push_back(cur); } else { pinta(0, mid, 0); random_shuffle(bons.begin(), bons.end()); } pinta(0, mid, 0); acaba(); } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { n=N; m=U.size(); x=A; y=B; for(int i=0; i<m; i++) { int a=U[i]; int b=V[i]; aresta[i][0]=a; aresta[i][1]=b; g[a].push_back(i); g[b].push_back(i); config.push_back(0); } dfs(0, -1, 0); tam=ask(config); for(int i=1; i<n; i++) { if(lvl[i]==tam/x) bons.push_back(i); else ruim[i]=1; } // for(int i=0; i<n; i++) { // if(ruim[i]) { // dfs(i, -1, 0); // break; // } // } // bons.push_back(0); fill(config.begin(), config.end(), 0); srand(time(0)+n+m); random_shuffle(bons.begin(), bons.end()); acaba(); }

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

highway.cpp: In function 'void acaba()':
highway.cpp:54:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=mid+1; i<bons.size(); i++) aux.push_back(bons[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...