Submission #1194967

#TimeUsernameProblemLanguageResultExecution timeMemory
1194967AestivateSeptember (APIO24_september)C++20
0 / 100
1095 ms320 KiB
#include<bits/stdc++.h>
using namespace std;
#define pb push_back


int solve(int n, int m, vector<int>f, vector<vector<int>>s){
    int tot=0;
    vector<int>ne(n+1, 0);
    vector<vector<int>>node(n, vector<int>());
    // cerr<<node.size()<<"\n";
    // cerr<<n<<" "<<node.size()<<" "<<ne.size()<<"\n";

	auto go = [&](auto self, int u) -> void
	{
        if(ne[u]) return;
        tot++;
        ne[u]=1;
        
		for(auto i: node[u])
			self(self, i);
	};
    for(int i=1;i<n;i++){
        node[f[i]].pb(i);
    }
    int now=0;
    int ans=0;
    vector<int>vis(n+1, 0);
    while(now<n-1){
        for(int i=0;i<s.size();i++){
            if(vis[s[i][now]]) continue;
            go(go, s[i][now]);
            tot--;
            vis[s[i][now]]=1;
        }
        now++;
        bool ok=0;
        while(!ok||tot){
            if(now==n-1) break;
            bool ok2=1;
            for(int i=0;i<s.size();i++){
                if(vis[s[i][now]]){
                    ok2=0;
                    break;
                }
            }
            if(!ok2){
                for(int i=0;i<s.size();i++){
                    if(vis[s[i][now]]) continue;
                    go(go, s[i][now]);
                    tot--;
                    vis[s[i][now]]=1;
                }
                now++;
                ok=0;
            }
            else ok=1;
        }
        ans++;
    }
    return ans;
}

// int main(){
//     int t;
//     cin>>t;
//     while(t--)
//         cout<<solve(5, 2, {-1, 0, 0, 1, 1}, {{1, 2, 3, 4}, {4,  1, 2, 3}})<<" "<<solve(3, 1, {-1, 0, 0}, {{1, 2}})<<"\n";
// }
#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...