이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// IOI 2021
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ends ' '
#define die(x) return cout << x << endl, 0
#define all(v) v.begin(), v.end()
#define sz(x) (int)(x.size())
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) { cerr << ends << H; debug_out(T...); }
#define debug(...) cerr << "{" << #__VA_ARGS__ << "}:", debug_out(__VA_ARGS__)
typedef long long ll;
typedef pair<int, int> pii;
const int INF = 1e9;
const ll MOD = 1e9 + 7;
////////////////////////////////////////////////////////////////////
const int N = 5e3 + 5;
int n, sum, cnt, D[N];
vector<int> G[N];
queue<int> Q;
int BFS(int r) {
memset(D, 63, sizeof D); D[r] = 1, Q.push(r), sum = cnt = 0;
while (!Q.empty()) {
int v = Q.front(); Q.pop();
sum += D[v], cnt++;
for (int u : G[v]) if (D[v] + 1 < D[u]) D[u] = D[v] + 1, Q.push(u);
}
if (cnt == n) return sum;
else return INF;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
mt19937 Rnd(time(0));
cin >> n;
for (int i = 1; i <= n; i++) {
int k; cin >> k;
while (k--) {
int p; cin >> p;
G[p].push_back(i);
}
}
int ans = INF;
for (int i = 1; i <= n; i++) ans = min(ans, BFS(i));
cout << ans << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |