Submission #1156730

#TimeUsernameProblemLanguageResultExecution timeMemory
1156730fatman87878Dreaming (IOI13_dreaming)C++20
100 / 100
66 ms26124 KiB
#include "dreaming.h" #include<bits/stdc++.h> using namespace std; #define IOS cin.tie(nullptr)->sync_with_stdio(0);//,cin.exceptions(cin.failbit); #define lb(x) (x)&-(x) #define all(x) (x).begin(),(x).end() #define ll long long constexpr int maxN=1e5+5; int n,m,l,dp[maxN],ans; bitset<maxN> vis; vector<pair<int,int>> adj[maxN]; void dfs(int now,int last){ dp[now] = 0; vis[now] = 1; for(auto [i,c]:adj[now])if(i!=last){ dfs(i,now); ans = max(ans,dp[now]+dp[i]+c); if(dp[i]+c>dp[now])dp[now] = dp[i]+c; } } int dfs2(int now,int last,int val){ int ret = max(val,dp[now]); vector<int> pref(1,0); for(auto [i,c]:adj[now])if(i!=last)pref.emplace_back(max(pref.back(),dp[i]+c)); reverse(all(adj[now])); for(auto [i,c]:adj[now])if(i!=last){ pref.pop_back(); ret = min(ret,dfs2(i,now,max(val,pref.back())+c)); val = max(val,dp[i]+c); } return ret; } int travelTime(int n, int m, int l, int A[], int B[], int T[]) { ans = 0; for(int i = 0;i<n;i++)adj[i].clear(),vis[i] = 0; for(int a,b,c;m--;){ a = A[m],b = B[m],c = T[m]; adj[a].emplace_back(b,c); adj[b].emplace_back(a,c); } vector<int> res; for(int i = 0;i<n;i++)if(!vis[i]){ dfs(i,i); int ret = dfs2(i,i,0); for(int j = 0;j<3&&j<res.size();j++)if(res[j]<ret)swap(res[j],ret); if(res.size()<3)res.emplace_back(ret); } if(res.size()>1)ans = max(ans,res[0]+res[1]+l); if(res.size()>2)ans = max(ans,res[1]+res[2]+2*l); return ans; }
#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...