제출 #1189470

#제출 시각아이디문제언어결과실행 시간메모리
1189470DedibeatSeptember (APIO24_september)C++20
0 / 100
3 ms5188 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; #define F first #define S second #define all(x) (x).begin(), (x).end() template<typename T, typename U> ostream &operator<<(ostream &os, const pair<T, U> &p) { return os << "(" << p.F << "," << p.S << ")"; } template<typename T> void print(T v) { for(auto x : v) cout << x << " "; cout << "\n"; } vector<int> adj[100005]; vector<int> rev_adj[100005]; vector<int> vis; void dfs(int v, vector<int> &output, vector<int> adj[]) { vis[v] = true; for(int u : adj[v]) { if(!vis[u]) dfs(u, output, adj); } output.push_back(v); } int solve(int N, int M, vector<int> F, vector<vector<int>> S) { vis.assign(N, 0); for(int i = 1; i < N; i++) { adj[i].push_back(F[i]); rev_adj[F[i]].push_back(i); } for(auto &record : S) { for(int i = 0; i < record.size() - 1; i++) { adj[record[i]].push_back(record[i + 1]); rev_adj[record[i + 1]].push_back(record[i]); } } vector<int> topo; for(int i = 0; i < N; i++) { if(!vis[i]) dfs(i, topo, adj); } reverse(all(topo)); vis.assign(N, 0); int cnt = 0; for(int v : topo) { if(!vis[v]) { vector<int> comp; dfs(v, comp, rev_adj); // print(comp); cnt += 1; } } return cnt - 1; }
#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...