Submission #1344849

#TimeUsernameProblemLanguageResultExecution timeMemory
1344849fahmid_rngDreaming (IOI13_dreaming)C++20
100 / 100
40 ms12832 KiB
#include<bits/stdc++.h>
using namespace std;

#define rep(i,a,b) for(int i=(a); i<(b); ++i)
#define all(array) array.begin(), array.end()

#include "dreaming.h"
int mx,mn;
vector<vector<pair<int,int>>> adj;
vector<int> mx1,mx2,node;
vector<bool> vis;
void dfs1(int u){
    vis[u]=1;
    for(pair<int,int> &c:adj[u]){
        if(vis[c.first]) continue;
        dfs1(c.first);
        mx2[u]=max(mx2[u],mx1[c.first]+c.second);
        if(mx2[u]>mx1[u]){
            swap(mx1[u],mx2[u]);
            node[u]=c.first;
        }
    }
}
void dfs2(int u,int p){
    for(pair<int, int> &c:adj[u]){
        int v,w;
        tie(v,w)=c;
        if(v==p) continue;
        if(v==node[u]){
            mx2[v]=max(mx2[v],mx2[u]+w);
            if(mx2[v]>mx1[v]){
                swap(mx1[v],mx2[v]);
                node[v]=u;
            }
        } else{
            mx2[v]=mx1[v];
            mx1[v]=mx1[u]+w;
            node[v]=u;
        }
        mx=max(mx,mx1[v]);
        mn=min(mn,mx1[v]);
        dfs2(v,u);
    }
}
int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    adj.resize(n); mx1.resize(n); mx2.resize(n); node.resize(n); vis.resize(n);
    int ans=0;
    vector<int> mx_val(3,-1e9-5);
    rep(i,0,m){
        adj[a[i]].push_back({b[i],t[i]});
        adj[b[i]].push_back({a[i],t[i]});
    }
    rep(i,0,n){
        if(!vis[i]){
            dfs1(i);
            mx=mx1[i];
            mn=mx1[i];
            dfs2(i,-1);
            ans=max(ans,mx);
            mx_val[2]=max(mx_val[2],mn);
            for(int i=1;i>=0;--i){
                if(mx_val[i+1]>mx_val[i]) swap(mx_val[i],mx_val[i+1]);
            }
        }
    }
    return max(ans,max(mx_val[0]+mx_val[1]+l,mx_val[1]+mx_val[2]+2*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...