Submission #1135831

#TimeUsernameProblemLanguageResultExecution timeMemory
1135831LuvidiDreaming (IOI13_dreaming)C++17
18 / 100
40 ms20800 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
 
const int maxn=1e5;
vector<pair<int,int>> adj[maxn];
int dp[maxn],dp2[maxn],x;
bool vis[maxn];
 
void dfs(int v,int p){
    vis[v]=1;
    dp[v]=0;
    for(auto[u,w]:adj[v])if(u!=p){
        dfs(u,v);
        dp[v]=max(dp[v],dp[u]+w);
    }
}

void dfs2(int v,int p){
    if(max(dp[v],dp2[v])<max(dp[x],dp2[x]))x=v;
    multiset<int> s;
    s.insert(dp2[v]);
    for(auto[u,w]:adj[v])if(u!=p)s.insert(w+dp[u]);
    for(auto[u,w]:adj[v])if(u!=p){
        s.erase(s.find(w+dp[u]));
        dp2[u]=w+*s.rbegin();
        s.insert(w+dp[u]);
        dfs2(u,v);
    }
}

int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    for(int i=0;i<m;i++){
        adj[a[i]].push_back({b[i],t[i]});
        adj[b[i]].push_back({a[i],t[i]});
    }
    vector<int> v;
    for(int i=0;i<n;i++){
        if(!vis[i]){
            dfs(i,i);
            x=i;
            dp2[i]=0;
            dfs2(i,i);
            v.push_back(max(dp[x],dp2[x]));
        }
    }
    sort(v.rbegin(),v.rend());
    if(v.size()==1){
        return v[0];
    }else if(v.size()==2){
        return v[0]+v[1]+l;
    }else{
        return max(v[0],v[2]+l)+v[1]+l;
    }   
}
#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...