Submission #1162668

#TimeUsernameProblemLanguageResultExecution timeMemory
1162668spongbTropical Garden (IOI11_garden)C++20
100 / 100
1385 ms29800 KiB
#include "garden.h" #include "gardenlib.h" #include <bits/stdc++.h> #define v vector #define pii pair<int,int> #define ll long long #define pli pair<long long, int> #define fi first #define se second using namespace std; const int LIMIT = 29; void dfs(v<v<int>> &adj, int node, int dist, v<int> &dists) { if (dists[node] != -1) return; dists[node] = dist; for (int nex : adj[node]) { dfs(adj, nex, dist + 1, dists); } } void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) { v<int> first(N, -1), second(N, -1), next(2 * N, -1); for (int i = 0; i < M; i++) { int a = R[i][0], b = R[i][1]; if (first[a] == -1) first[a] = b; else if (second[a] == -1) second[a] = b; if (first[b] == -1) first[b] = a; else if (second[b] == -1) second[b] = a; } for (int i = 0; i < N; i++) { if (second[i] == -1) second[i] = first[i]; } for (int i = 0; i < N; i++) { next[2 * i] = (first[first[i]] == i) ? first[i] * 2 + 1 : first[i] * 2; next[2 * i + 1] = (first[second[i]] == i) ? second[i] * 2 + 1 : second[i] * 2; } int p_cycle0 = 1e9 + 100, p_cycle1 = 1e9 + 100; int cur = 2 * P; for (int i = 0; i < 2 * N; i++) { cur = next[cur]; if (cur == 2 * P) { p_cycle0 = i + 1; break; } } cur = 2 * P + 1; for (int i = 0; i < 2 * N; i++) { cur = next[cur]; if (cur == 2 * P + 1) { p_cycle1 = i + 1; break; } } v<v<int>> adj(2 * N); for (int i = 0; i < 2 * N; i++) { adj[next[i]].push_back(i); } v<int> dists0(2 * N, -1), dists1(2 * N, -1); dfs(adj, 2 * P, 0, dists0); dfs(adj, 2 * P + 1, 0, dists1); for (int i = 0; i < Q; i++) { int K = G[i], count = 0; for (int j = 0; j < N; j++) { if ((dists0[2 * j] != -1 && dists0[2 * j] <= K && (K - dists0[2 * j]) % p_cycle0 == 0) || (dists1[2 * j] != -1 && dists1[2 * j] <= K && (K - dists1[2 * j]) % p_cycle1 == 0)) { count++; } } answer(count); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...