# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1172357 | dion324 | 9월 (APIO24_september) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int solve(ll N, ll M, vector<ll> F, vector<vector<ll>> S) {
if (S.size() == 1) {
return S[0].size();
}
vector<int> indices(M, 0);
ll total = M * (N - 1);
ll ctr = 0;
queue<int> q;
q.push(S[0][0]);
// indices[0] += 1;
ll days = 0;
unordered_set<int> visited = {S[0][0]};
while (ctr < total) {
days += 1;
while (!q.empty()) {
ll leaf = q.front();
q.pop();
for (int j = 0; j < M; ++j) {
for (int k = 0; k < N - 1; ++k) {
if (indices[j] >= N - 1) {
continue;
}
if (S[j][indices[j]] != leaf && visited.find(S[j][indices[j]]) == visited.end()) {
q.push(S[j][indices[j]]);
visited.insert(S[j][indices[j]]);
indices[j]++;
ctr++;
} else {
indices[j]++;
ctr++;
break;
}
}
}
}
}
return days;
}