제출 #106566

#제출 시각아이디문제언어결과실행 시간메모리
106566tictaccat통행료 (IOI18_highway)C++14
12 / 100
206 ms7812 KiB
#include "highway.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int N,A,B,M,depthT;
vector<vector<pair<int,int>>> adj;
vector<pair<int,int>> pos;

void dfs(int u, int depth, int p) {
//  cout << u << " " << pos.size() << "\n";
  for (auto e: adj[u]) {
    int v,k; tie(v,k) = e;
    if (v == p) continue;
    if (depth+1 == depthT) pos.push_back(e);
    else dfs(v,depth+1,u);
  }
}

void find_pair(int tempN, std::vector<int> U, std::vector<int> V, int tempA, int tempB) {

  N = tempN; A = tempA; B = tempB; M = U.size(); adj.resize(N); 

  for (int i = 0; i < M; i++) {
    adj[U[i]].push_back(make_pair(V[i],i));
    adj[V[i]].push_back(make_pair(U[i],i));
  }

  vector<int> w(M,0);
  depthT = ask(w)/A;

  dfs(0,0,-1);

  while (pos.size() > 1) {
    int mid = pos.size()/2;
    for (int i = 0; i < mid; i++) w[pos[i].second] = 0;
    for (int i = mid; i < pos.size(); i++) w[pos[i].second] = 1;
    if (ask(w) == (ll)depthT*A) {
      pos.erase(pos.begin()+mid,pos.end());
    }
    else {
      pos.erase(pos.begin(),pos.begin()+mid);
    }
  }

  //cout << pos[0].first << "\n";

  answer(0, pos[0].first);
}

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

highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:39:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = mid; i < pos.size(); i++) w[pos[i].second] = 1;
                       ~~^~~~~~~~~~~~
#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...