Submission #1065164

#TimeUsernameProblemLanguageResultExecution timeMemory
1065164Shadow1September (APIO24_september)C++17
100 / 100
294 ms61848 KiB
#include "september.h" #include <bits/stdc++.h> using namespace std; #define output_vector(v) for(auto &x : v){cout << x << ' ';}cout << '\n'; #define show(x) cerr << (#x) << " = " << (x) << '\n'; #define sz(x) int(x.size()) int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { int ans = 0; vector<vector<int>> child(N); for(int i=1; i<N; ++i) { child[F[i]].push_back(i); } vector<vector<set<int>>> c(M, vector<set<int>>(N)); vector<set<int>> cur(M), track(M); for(int j=0; j<N; ++j) { for(auto &k : child[j]) { for(int i=0; i<M; ++i) c[i][j].insert(k); } } for(int j=0; j<N-1; ++j) { for(int i=0; i<M; ++i) { int k = S[i][j]; cur[i].insert(k); track[i].insert(k); while(k > 0 && cur[i].count(k) && c[i][k].empty()) { cur[i].erase(k); c[i][F[k]].erase(k); k = F[k]; } } bool cnt = 0, same = true; for(int i=0; i<M; ++i) { cnt += sz(cur[i]); } for(int i=1; i<M; ++i) { if(track[i] != track[0]) same = false; } if(cnt == 0 && same) { ++ans; for(int i=0; i<M; ++i) track[i].clear(); } } return ans; } // void taskcase() { // int N, M; // assert(2 == scanf("%d%d", &N, &M)); // std::vector<int> F(N); // F[0] = -1; // for (int i = 1; i < N; ++i) // assert(1 == scanf("%d", &F[i])); // std::vector<std::vector<int>> S(M, std::vector<int>(N - 1)); // for (int i = 0; i < M; ++i) // for (int j = 0; j < N - 1; ++j) // assert(1 == scanf("%d", &S[i][j])); // printf("%d\n", solve(N, M, F, S)); // } // int main() { // int T; // assert(1 == scanf("%d", &T)); // while(T--) taskcase(); // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...