이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e2 + 25;
vector <int> adj[MAXN];
int n;
vector <int> cur; bool flag = 0;
void getPath (int a, int p, int b) {
cur.push_back(a);
if (a == b) {
flag = 1;
return;
}
for (auto j : adj[a]) {
if (j == p) continue;
getPath(j, a, b);
if (flag) return;
}
cur.pop_back();
}
int main () {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i < n; i++) {
int a, b; cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector <int> dd;
for (int i = 1; i <= n; i++) {
if ((int)adj[i].size() == 1) {
dd.push_back(i);
}
}
int mx = 0, cnt = 0;
for (int i = 0; i + 1 < (int)dd.size(); i++) {
for (int j = i + 1; j < (int)dd.size(); j++) {
int dist[n + 1] = {};
cur.clear(); flag = 0;
getPath(dd[i], -1, dd[j]);
assert(flag);
for (int k = 1; k <= n; k++) dist[k] = 1e9;
queue <int> dd2;
for (auto k : cur) {
dist[k] = 0;
dd2.push(k);
}
while (!dd2.empty()) {
auto k = dd2.front();
dd2.pop();
for (auto j : adj[k]) {
if (1 + dist[k] < dist[j]) {
dist[j] = 1 + dist[k];
dd2.push(j);
}
}
}
int g = (int)cur.size() - 1;
g *= *max_element(dist + 1, dist + n + 1);
if (g == mx) cnt++;
else if (g > mx) {
mx = g; cnt = 1;
}
}
}
cout << mx << " " << cnt << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |