Submission #1361548

#TimeUsernameProblemLanguageResultExecution timeMemory
1361548marizaSeptember (APIO24_september)C++20
100 / 100
136 ms29820 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll N=1e5+1;

vector<ll> g[N];
vector<ll> s;
bool vis1[N];
void dfs1(ll curr){
    if(vis1[curr]) return;
    vis1[curr]=1;

    for(auto nxt:g[curr]){
        dfs1(nxt);
    }

    s.push_back(curr);
}

vector<ll> rg[N];
ll c[N];
bool vis2[N];
void dfs2(ll curr, ll x){
    if(vis2[curr]) return;
    vis2[curr]=1;

    c[curr]=x;

    for(auto nxt:rg[curr]){
        dfs2(nxt,x);
    }
}

int solve(int n, int m, vector<int> p, vector<vector<int>> a){
    for(ll i=0; i<n; i++){
        g[i].clear();
        rg[i].clear();
    }

    for(ll i=1; i<n; i++){
        g[i].push_back(p[i]);
        rg[p[i]].push_back(i);
    }
    for(ll i=0; i<m; i++){
        for(ll j=0; j<n-2; j++){
            g[a[i][j]].push_back(a[i][j+1]);
            rg[a[i][j+1]].push_back(a[i][j]);
        }
    }

    s.clear();
    for(ll i=0; i<n; i++){
        vis1[i]=0;
        vis2[i]=0;
    }

    for(ll i=0; i<n; i++){
        dfs1(i);
    }
    reverse(s.begin(),s.end());

    ll ans=0;
    for(auto i:s){
        if(!vis2[i]){
            ans++;
            dfs2(i,i);
        }
    }

	return ans-1;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...