Submission #347557

#TimeUsernameProblemLanguageResultExecution timeMemory
347557milleniumEeeeTropical Garden (IOI11_garden)C++17
49 / 100
5032 ms4844 KiB
#include "garden.h"
#include "gardenlib.h"
#include <bits/stdc++.h>
//#include "grader.cpp"
#define pii pair<int, int>
#define fr first
#define sc second
using namespace std;
 
const int MAXN = 150005;
 
int k;
int n, m, p;
 
vector <pii> g[MAXN];
 

int dfs(int v, int par = -1, int len = 0) {
  if (len == k) {
    if (v == p) {
      return 1;
    } else {
      return 0;
    }
  }
  pii best = {(int)1e9, -1};
  auto get = [&](pii a, pii b) {
    if (a.fr < b.fr) {
      return a;
    } else {
      return b;
    }
  };
  for (pii to : g[v]) {
    if (to.sc != par) {
      best = get(best, to);
    }
  }
  if (best.fr == 1e9) {
    return dfs(par, v, len + 1);
  } else {
    return dfs(best.sc, v, len + 1);
  }
}
 
void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) {
  n = N;
  m = M;
  p = P;
  for (int i = 0; i < M; i++) {
    g[R[i][0]].push_back({i, R[i][1]});
    g[R[i][1]].push_back({i, R[i][0]});
  }
  for (int i = 0; i < Q; i++) {
    k = G[i];
    int ans = 0;    
    for (int v = 0; v < N; v++) {
      ans += dfs(v);
    }
    answer(ans);
  }
  return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...