Submission #38450

#TimeUsernameProblemLanguageResultExecution timeMemory
38450mirbek01Hard route (IZhO17_road)C++14
19 / 100
2000 ms154840 KiB
# include <bits/stdc++.h> #pragma GCC optimize("Ofast") # define pb push_back # define fr first # define sc second # define mk make_pair using namespace std; const long long linf = 1e18 + 7; const int inf = 1e9 + 7; const int N = 5e5 + 5; typedef long long ll; int n, dist[5005][5005], cnt; ll ans; int tin[N], tout[N], timer, p[20][N]; vector <int> g[N], v; void dfs(int v, int par = 0){ tin[v] = ++ timer; p[0][v] = par; for(int i = 1; i <= 17; i ++) p[i][v] = p[i - 1][p[i - 1][v]]; for(int to : g[v]){ if(to == par) continue; dfs(to, v); } tout[v] = timer; } bool upper(int a, int b){ return tin[a] <= tin[b] && tout[a] >= tout[b]; } int lca(int a, int b){ if(upper(a, b)) return a; if(upper(b, a)) return b; for(int i = 17; i >= 0; i --){ if(!upper(p[i][a], b) && p[i][a]) a = p[i][a]; } return p[0][a]; } void Dfs(int i, int v, int par = 0){ for(int to : g[v]){ if(to == par) continue; dist[i][to] = dist[i][v] + 1; Dfs(i, to, v); } } int main(){ scanf("%d", &n); for(int i = 1; i < n; i ++){ int x, y; scanf("%d %d", &x, &y); g[x].pb(y); g[y].pb(x); } dfs(1, 0); for(int i = 1; i <= n; i ++){ if(g[i].size() == 1) v.pb(i); } for(int i : v) Dfs(i, i); for(int ii = 0; ii < v.size(); ii ++){ for(int jj = ii + 1; jj < v.size(); jj ++){ int i = v[ii], j = v[jj]; int lc = lca(i, j); vector <int> vec; for(int k = 1; k <= n; k ++){ if(upper(lc, k) && (upper(k, i) || upper(k, j))) vec.pb(k); } int H = 0; for(int k = 1; k <= n; k ++){ int mn = inf; for(int to : vec) mn = min(mn, dist[k][to]); H = max(H, mn); } ll cur = H * dist[i][j]; if(cur > ans){ ans = cur; cnt = 0; } if(ans == cur) cnt ++; } } cout << ans << " " << cnt << endl; }

Compilation message (stderr)

road.cpp: In function 'int main()':
road.cpp:75:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int ii = 0; ii < v.size(); ii ++){
                          ^
road.cpp:76:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int jj = ii + 1; jj < v.size(); jj ++){
                                     ^
road.cpp:57:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d", &n);
                      ^
road.cpp:61:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d %d", &x, &y);
                                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...