제출 #1200888

#제출 시각아이디문제언어결과실행 시간메모리
1200888muhammadali_20099월 (APIO24_september)C++20
100 / 100
97 ms12736 KiB
#include "september.h"

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>>g;
vector<vector<int>>vis;
vector<set<int>>st;
void dfs(int u,int j){
    vis[j][u] = 1;
    for(int v : g[u]){
        if(!vis[j][v]){
			st[j].insert(v);
			dfs(v, j);
		}
    }
}

int solve(int n, int m, std::vector<int> adj, std::vector<std::vector<int>> val) {
	g.assign(n, {});
	st.assign(m, {});
	vis.assign(m, vector<int>(n, 0));
	for(int i = 1; i < n; i ++){
		g[adj[i]].push_back(i);
	}
	int ans = 0, cnt = 0;
	vector<int>oc(n);
	for(int i = 0; i < n - 1; i ++){
		int ok = 1;
		for(int j = 0; j < m; j ++){
			int cur = val[j][i];
			oc[cur] ++;
			if(oc[cur] == m)cnt ++;
			if(st[j].count(cur))st[j].erase(cur);
			else dfs(cur, j);
			if(st[j].size() != 0)ok = 0;
		}
		if(ok && cnt == i + 1)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...