Submission #1153552

#TimeUsernameProblemLanguageResultExecution timeMemory
1153552hiderrTropical Garden (IOI11_garden)C++20
49 / 100
5089 ms2120 KiB
#include "garden.h"
#include "gardenlib.h"
#include <bits/stdc++.h>
using namespace std;

#define loop(i, a, b) for(int i = a; i <= b; i++)
#define loop_rev(i, a, b) for(int i = a; i >= b; i--)
#define all(x) x.begin(), x.end()
#define sz(x) int(x.size())
#define pb push_back

using ll = long long;
int n, m, p, q;

void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) {

  n = N, m = M, p = P, q = Q;


  vector<vector<pair<int, int>>> graph(n);

  loop(i, 0, m-1) {
    graph[R[i][0]].pb({ i, R[i][1] });
    graph[R[i][1]].pb({ i, R[i][0] });
  }

  loop(qi, 0, q-1) {
    int k = G[qi];
    vector<int> pr(n, (-1)), where(n);
    iota(all(where), 0);

    loop(phase, 1, k) {
      loop(st_node, 0, n-1) {
        pair<int, int> minim = { 1e9, 0 };
        int i = where[st_node];
        if(sz(graph[i]) == 1) {
          minim = graph[i][0];
        }
        else {
          for(auto [ prio, s ] : graph[i]) {
            if(s == pr[st_node]) continue;
            minim = min(minim, { prio, s });
          }
        }
        where[st_node] = minim.second;
        pr[st_node] = i;
      }
    }

    int res = 0;

    loop(i, 0, n-1) {
      if(where[i] == p) {
        ++res;
      }
    }

    answer(res);

  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...