제출 #1151316

#제출 시각아이디문제언어결과실행 시간메모리
1151316tapilyocaSeptember (APIO24_september)C++20
100 / 100
166 ms10944 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector<ll>; /***********************************************/ void DFS(int curr, vector<bool> &vis, unordered_set<int> &wait, vector<vector<int>> &adj){ // cerr << "NEW DFS CALL ON " << curr << endl; vis[curr] = 1; wait.insert(curr); if(adj[curr].size() == 0) return; for(int c : adj[curr]){ if(vis[c]) continue; 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); unordered_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]){ DFS(at,vis,waiting,kids); } vis[at] = 1; if(freq[at] == M){ waiting.erase(at); } } // cout << "VIS: " << endl; // for(int i = 0; i < N; i++){ // cout << vis[i] << " "; // } cout << endl; 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...