제출 #1189486

#제출 시각아이디문제언어결과실행 시간메모리
1189486Dedibeat9월 (APIO24_september)C++20
100 / 100
175 ms22420 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";
}
int task1 = 1, task2 = 1, task3 = 1, task4 = 1;

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_1(int N, int M, vector<int> &F, vector<vector<int>> &S)
{
	return N - 1;
}
int solve_full(int N, int M, vector<int> &F, vector<vector<int>> &S)
{
	for(int i = 0; i < N; i++)
	{
		adj[i].clear();
		rev_adj[i].clear();
	}
    vis.assign(N, 0);
    for(int i = 1; i < N; i++)
    {
    	if(F[i] == 0) continue;
        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 = 1; i < N; i++)
    {
        if(!vis[i]) dfs(i, topo, adj);
    }
    reverse(all(topo));
    int cnt = 0;
    vis.assign(N, 0);
    for(int v : topo)
    {
        if(!vis[v])
        {
            vector<int> comp;
            dfs(v, comp, rev_adj);
            cnt++;
        }
    }
    return cnt;
}

int solve(int N, int M, vector<int> F, vector<vector<int>> S)
{
//	if(M == 1) return solve_1(N, M, F, S);
	return solve_full(N, M, F, S);
}
#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...