제출 #1202187

#제출 시각아이디문제언어결과실행 시간메모리
1202187ismoilmirzouzSeptember (APIO24_september)C++20
0 / 100
0 ms324 KiB
#include "september.h"


#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=a; i<b; i++)

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	// cout<<"f"<<endl;
	int n = N, m = M;
	vector<int> adj[n+1];
	rep(i, 1, n) {
		adj[F[i]].push_back(i+1);
	}
	vector<int> dp(n+1, -1);
	rep(j,0,m){
		rep(i,0,n-1){
			dp[S[j][i]] = max(dp[S[j][i]], i);
		}
	}
	function<void(int, int)> dfs = [&](int u, int p) {
		for (auto v: adj[u]){
			if (v == p) continue;
			dfs(v, u);
			dp[u] = max(dp[u], dp[v]);
		}
	};
	dfs(1, 0);
	int ans = 0;
	int nxt = -1;
	rep(i, 0, n-1){
		// cout<<i<<" "<<nxt<<endl;
		if (i > nxt){
			ans++;
		}
		nxt = max(dp[S[0][i]],nxt);
	}
	return ans;
}

// int main() {
// 	int T;
// 	cin>>T;
// 	while(T--){
// 		int N, M;
// 		cin>>N>>M;
// 		std::vector<int> F(N);
// 		F[0] = -1;
// 		for (int i = 1; i < N; ++i)
// 			cin>>F[i];
		
// 		std::vector<std::vector<int>> S(M, std::vector<int>(N - 1));
// 		for (int i = 0; i < M; ++i)
// 			for (int j = 0; j < N - 1; ++j)
// 				cin>>S[i][j];
		
// 		cout<<solve(N, M, F, S)<<endl;
// 	}
// 	return 0;
// }
#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...