Submission #139400

# Submission time Handle Problem Language Result Execution time Memory
139400 2019-07-31T16:05:08 Z wilwxk Highway Tolls (IOI18_highway) C++14
0 / 100
534 ms 262148 KB
#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()==2) {
    answer(bons[0], bons[1]);
    return;
  }
  // for(auto cur : bons) printf("bb %d (%d)\n", cur, pid[cur]); cout << endl;
  
  vector<int> aux;
  int mid=bons.size()/2;
  pinta(0, mid, 1);
  int val=ask(config);

  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+2*(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 {
    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) 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();
}

Compilation message

highway.cpp: In function 'void acaba()':
highway.cpp:53: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 time Memory Grader output
1 Incorrect 4 ms 2424 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2424 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 3588 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 6 ms 2612 KB Output is incorrect: more than 100 calls to ask.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 534 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 481 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -