제출 #1212829

#제출 시각아이디문제언어결과실행 시간메모리
1212829k1r1t09월 (APIO24_september)C++20
100 / 100
101 ms15040 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 110000;

vector<int> g[N];
int pos[N], p[N], k[N];

void dfs(int v, int t = (int)(1e9)) {
	if (v != 0) {
		t = min(t, pos[v]);
		p[t]++;
		p[pos[v]]--;
	}
	for (int u : g[v])
		dfs(u, t);
}

int solve(int n, int m, vector<int> f, vector<vector<int>> s) {
	for (int i = 0; i < n; i++) {
		p[i] = 0;
		g[i].clear();
	}
	for (int i = 1; i <= n - 1; i++)
		g[f[i]].push_back(i);
	for (int i = 0; i < m; i++) {
		pos[0] = (int)(1e9);
		for (int j = 0; j + 1 < n; j++)
			pos[s[i][j]] = j;
		dfs(0);
	}
	for (int i = 1; i < n; i++)
		p[i] += p[i - 1];
	for (int i = 0; i < n; i++)
		k[i] = 0;
	int ans = 0, cnt0 = n, cntm = 0;
	for (int i = 0; i + 1 < n; i++) {
		for (int j = 0; j < m; j++) {
			k[s[j][i]]++;
			if (k[s[j][i]] == 1)
				cnt0--;
			if (k[s[j][i]] == m)
				cntm++;
		}
		if (cnt0 + cntm == n && p[i] == 0)
			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...