제출 #1189470

#제출 시각아이디문제언어결과실행 시간메모리
1189470Dedibeat9월 (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...