Submission #1353279

#TimeUsernameProblemLanguageResultExecution timeMemory
1353279thesentroSeptember (APIO24_september)C++20
100 / 100
87 ms21552 KiB
#include "september.h"
#include <bits/stdc++.h>
#include <vector>
using namespace std;
#define ll long long

ll maxi = 202020;
vector<vector<ll>>g(maxi);
vector<ll>val(maxi, 0);
void dfs(ll x, ll p)
{
	for (auto i:g[x])
	{
		if (i!=p)
		{
			dfs(i, x);
			val[x] = max(val[x], val[i]);
		}
	}
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	for (int i=0 ; i<N ; i++)
	{
		g[i].clear();
		val[i] = 0;
	}
	for (int i=0 ; i<M ; i++)
	{
		for (ll j=0 ; j<N-1 ; j++)
		{
			val[S[i][j]] = max(val[S[i][j]], j);
		}
	}
	for (int i=1 ; i<N ; i++)
	{
		g[i].push_back(F[i]);
		g[F[i]].push_back(i);
	}
	dfs(0, -1);
	vector<ll>frq(N+1, 0), frq1(M+1, 0);
	frq1[0] = N;
	ll unt = 0;
	ll res = 0;
	for (int i=0 ; i<N-1 ; i++)
	{
		for (int j=0 ; j<M ; j++)
		{
			frq1[frq[S[j][i]]]--;
			frq[S[j][i]]++;
			frq1[frq[S[j][i]]]++;
			unt = max(unt, val[S[j][i]]);
		}
		if (frq1[M]==i+1 and unt<=i)
			res++;
	}
	return res;

}
#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...