제출 #941420

#제출 시각아이디문제언어결과실행 시간메모리
941420TAhmed33Hard route (IZhO17_road)C++98
19 / 100
4 ms604 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...