제출 #1197330

#제출 시각아이디문제언어결과실행 시간메모리
1197330toast129월 (APIO24_september)C++20
55 / 100
1095 ms1020 KiB
#include "september.h"

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

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	vector<vector<int>> adj(N);
	for (int i = 1; i < N; i++) {
		adj[i].push_back(F[i]);
		adj[F[i]].push_back(i);
	}
	int ans = 0;
	map<int, int> freq, m;
	m[0] = N-1;
	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]]]++;
		}
		if (m[0]+m[M] == N-1) {
			vector<bool> visited(N);
			queue<int> q;
			q.push(0);
			while (!q.empty()) {
				int cur = q.front();
				q.pop();
				if (visited[cur]) continue;
				if (freq[cur] == M) continue;
				visited[cur] = true;
				for (auto e : adj[cur]) {
					if (!visited[e]) q.push(e);
				}
			}
			bool poss = true;
			for (int j = 0; j < N; j++) {
				if (!freq[j] && !visited[j]) {
					poss = false;
					break;
				}
			}
			if (poss) ans++;
		}
	}
	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...