Submission #1151282

#TimeUsernameProblemLanguageResultExecution timeMemory
1151282tapilyocaSeptember (APIO24_september)C++20
55 / 100
1093 ms840 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector<ll>; /***********************************************/ void DFS(int curr, vector<bool> &vis, set<int> &wait, vector<vector<int>> adj){ if(vis[curr]){ return; } vis[curr] = 1; wait.insert(curr); if(adj[curr].size() == 0){ return; } for(int c : adj[curr]){ DFS(c, vis, wait, adj); } } int solve(int N, int M, vector<int> F, vector<vector<int>> S){ vector<vector<int>> kids(N+1); for(int i = 1; i < N; i++){ kids[F[i]].push_back(i); } vector<bool> vis(N+1, 0); set<int> waiting; vector<int> freq(N,0); int ans = 0; for(int i = 0; i < N-1; i++){ for(int j = 0; j < M; j++){ int at = S[j][i]; waiting.insert(at); freq[at]++; if(!vis[at]){ // then we haven't touched this yet // so set all of the children to be visited DFS(at,vis,waiting,kids); } vis[at] = 1; if(freq[at] == M){ // cerr << "ERASING" << endl; waiting.erase(at); } } // waiting // cout << "WAITING ON " << i << " : " << endl; // for(auto itr = waiting.begin(); itr != waiting.end(); itr++){ // cout << *itr << " "; // } if(waiting.size() == 0){ ans++; } } return ans; }
#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...