Submission #1241320

#TimeUsernameProblemLanguageResultExecution timeMemory
1241320lunarechoSeptember (APIO24_september)C++20
0 / 100
1 ms580 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;

int dfs(int node,vector<int>& sz,vector<int> adj[])
{
	int subtree = 0;
	for(int neighbour : adj[node])
	{
		sz[neighbour] = dfs(neighbour,sz,adj);
		subtree += sz[neighbour] + 1;
	}
	sz[node] = subtree;
	return sz[node];
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	vector<int> adj[N];
	for(int i=1;i<N;++i)
	{
		int u = i;
		int v = F[i];
		adj[v].push_back(i);
	}
	vector<int> sz(N,0);
	int x = dfs(0,sz,adj);
	int cnt = 0;
	map<int,int> mp;
	for(int i=0;i<N;++i)
	{
		++mp[sz[i]];
	}
	map<int,int> lol;
	vector<int> sz2 = sz;
	for(int i=0;i<N;++i)
	{
		int nd = S[0][i];
		if(sz2[nd] != 0)
			++lol[sz[nd]];
		else if(lol[sz[nd]] == 0)
		{
			--sz2[F[nd]];
			--mp[sz[nd]];
			if(mp[sz[nd]] == 0)
				++cnt;
		}
	}	
	return cnt;
}
#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...