제출 #1076347

#제출 시각아이디문제언어결과실행 시간메모리
1076347ArthuroWich열대 식물원 (Tropical Garden) (IOI11_garden)C++17
69 / 100
5042 ms47908 KiB
#include "garden.h" #include "gardenlib.h" #include<bits/stdc++.h> using namespace std; int n, m, P, ans = 0; vector<int> adj[150005]; int succ[300005][31]; void initsucc() { for (int j = 1; j < 31; j++) { for (int i = 0; i <= 2*n; i++) { succ[i][j] = succ[succ[i][j-1]][j-1]; } } } void calc(int a, int k) { for (int i = 0; i < 31; 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++) { ans = 0; for (int i = 0; i < n; i++) { calc(i, G[j]); } answer(ans); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...