Submission #420020

#TimeUsernameProblemLanguageResultExecution timeMemory
420020jlallas384Dreaming (IOI13_dreaming)C++17
100 / 100
181 ms34984 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; const int N = 100100; vector<int> dp[N],pre[N],suf[N]; vector<pair<int,int>> g[N]; int mx[N],vis[N]; void dfs1(int v,int p){ vis[v] = 1; for(auto [u,w]: g[v]) if(u != p){ dfs1(u,v); dp[v].push_back(w + mx[u]); } if(dp[v].size()) mx[v] = *max_element(dp[v].begin(), dp[v].end()); } vector<int> mins; int ans = 0; void dfs2(int v,int p,int id,int bw){ if(p != -1){ int prMx = (id == 0 ? 0 : pre[p][id - 1]); int suMx = (id == (int) suf[p].size() - 1 ? 0 : suf[p][id + 1]); dp[v].push_back(max(prMx,suMx) + bw); } if(g[v].empty()){ mins.back() = 0; return; } ans = max(ans,*max_element(dp[v].begin(),dp[v].end())); mins.back() = min(mins.back(),*max_element(dp[v].begin(), dp[v].end())); pre[v].resize(dp[v].size()); suf[v].resize(dp[v].size()); pre[v][0] = dp[v][0], suf[v].back() = dp[v].back(); for(int i = 1; i < dp[v].size(); i++){ pre[v][i] = max(pre[v][i-1],dp[v][i]); } for(int i = (int) dp[v].size() - 2; i >= 0; i--){ suf[v][i] = max(suf[v][i+1],dp[v][i]); } int ch = 0; for(auto [u,w]: g[v]) if(u != p){ dfs2(u,v,ch++,w); } } int travelTime(int n, int m, int l, int A[], int B[], int T[]) { for(int i = 0; i < m; i++){ g[A[i]].emplace_back(B[i],T[i]); g[B[i]].emplace_back(A[i],T[i]); } for(int i = 0; i < n; i++) if(!vis[i]){ mins.push_back(1e9); dfs1(i,-1); dfs2(i,-1,0,0); } sort(mins.rbegin(), mins.rend()); int maxP = mins[0]; for(int i = 1; i < mins.size(); i++){ ans = max(ans,maxP + l + mins[i]); maxP = max(maxP,mins[i] + l); } return ans; }

Compilation message (stderr)

dreaming.cpp: In function 'void dfs2(int, int, int, int)':
dreaming.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i = 1; i < dp[v].size(); i++){
      |                    ~~^~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:59:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(int i = 1; i < mins.size(); i++){
      |                    ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...