Submission #1076334

#TimeUsernameProblemLanguageResultExecution timeMemory
1076334ArthuroWichTropical Garden (IOI11_garden)C++17
49 / 100
23 ms11856 KiB
#include "garden.h" #include "gardenlib.h" #include<bits/stdc++.h> using namespace std; int n, m, P, k, ans = 0; vector<int> adj[150005]; int succ[300005][20]; void initsucc() { for (int j = 1; j < 20; j++) { for (int i = 0; i < 2*n; i++) { succ[i][j] = succ[succ[i][j-1]][j-1]; } } } void calc(int a) { for (int i = 0; i < 20; i++) { if (k & (1 << i)) { a = succ[a][i]; } } if (a == P || a == P+n) { ans++; } } void count_routes(int N, int M, int pp, int R[][2], int Q, int G[]) { n = N, m = M, P = pp; for (int i = 0; i < m; i++) { if (adj[R[i][0]].size() < 2) { adj[R[i][0]].push_back(R[i][1]); } if (adj[R[i][1]].size() < 2) { adj[R[i][1]].push_back(R[i][0]); } } for (int i = 0; i < n; i++) { if (adj[i].size() == 1) { if (i == adj[adj[i][0]][0]) { succ[i][0] = adj[i][0]+n; } else { succ[i][0] = adj[i][0]; } succ[i+n][0] = succ[i][0]; } else { if (i == adj[adj[i][0]][0]) { succ[i][0] = adj[i][0]+n; } else { succ[i][0] = adj[i][0]; } if (i == adj[adj[i][1]][0]) { succ[i+n][0] = adj[i][1]+n; } else { succ[i+n][0] = adj[i][1]; } } } initsucc(); for (int j = 0; j < Q; j++) { k = G[j]; ans = 0; for (int i = 0; i < n; i++) { calc(i); } answer(ans); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...