Submission #1197353

#TimeUsernameProblemLanguageResultExecution timeMemory
1197353toast12September (APIO24_september)C++20
100 / 100
439 ms15752 KiB
#include "september.h"

#include <vector>
#include <map>
#include <set>
using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	vector<vector<int>> adj(N);
	vector<int> deg(N);
	for (int i = 1; i < N; i++) {
		adj[i].push_back(F[i]);
		adj[F[i]].push_back(i);
		deg[F[i]]++;
		deg[i]++;
	}
	int ans = 0;
	map<int, int> freq, m;
	m[0] = N-1;
	int nodes = N, edges = N-1;
    set<int> s;
	for (int i = 0; i < N-1; i++) {
		for (int j = 0; j < M; j++) {
			m[freq[S[j][i]]]--;
			freq[S[j][i]]++;
			m[freq[S[j][i]]]++;
			s.insert(S[j][i]);
		}
		if (m[0]+m[M] == N-1) {
			nodes -= s.size();
			for (auto x : s) {
				int cnter = 0;
				for (auto e : adj[x]) {
					if (deg[e]) deg[e]--;
                    else cnter++;
				}
				edges -= adj[x].size()-cnter;
				deg[x] = 0;
			}
			if (nodes == edges+1) ans++;
            s.clear();
		}
	}
	return ans;
}
#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...