Submission #1344828

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

using ll=long long;
using ull=unsigned long long;

#define rep(i,a,b) for(int i=(a); i<(b); ++i)
#define all(array) array.begin(), array.end()
#define bitcnt(x) ((sizeof(x) <= sizeof(int)) ? (32 - __builtin_clz(x)) : (64 - __builtin_clzll(x)))

//#define OJ
#ifndef OJ
#define debug(x) cerr<<"line "<<__LINE__<<": "<<#x<<" "; _print(x); cerr<<'\n';
#else
#define debug(x)
#endif

template<class T> void _print(T a);
template<class T, class V> void _print(pair<T, V> &p);
template<class T> void _print(vector<T> &a);
template<class T> void _print(set<T> &s);
template<class T, class V> void _print(map<T, V> &mp);
template<class T> void _print(deque<T> &d);
template<class T> void _print(stack<T> st);
template<class T> void _print(queue<T> q);
template<class T> void _print(priority_queue<T> pq);

template<class T> void _print(T a){cerr<<a;}
template<class T, class V> void _print(pair<T, V> &p){cerr<<"{"; _print(p.first); cerr<<", "; _print(p.second); cerr<<"}";}
template<class T> void _print(vector<T> &a){cerr<<"[ "; for(auto c:a){_print(c);cerr<<" ";} cerr<<"]";}
template<class T> void _print(set<T> &s){cerr<<"[ "; for(auto c:s){_print(c);cerr<<" ";} cerr<<"]";}
template<class T, class V> void _print(map<T, V> &mp){cerr<<"[ ";for(auto c:mp){_print(c); cerr<<" ";} cerr<<"]";}
template<class T> void _print(deque<T> &d){cerr<<"[ "; for(auto c:d){_print(c); cerr<<" ";} cerr<<"]";}
template<class T> void _print(stack<T> st){cerr<<"| "; while(!st.empty()){auto c=st.top(); st.pop(); _print(c); cerr<<" ";} cerr<<"|";}
template<class T> void _print(queue<T> q){cerr<<"( "; while(!q.empty()){auto c=q.front(); q.pop(); _print(c); cerr<<" ";} cerr<<")";}
template<class T> void _print(priority_queue<T> pq){cerr<<"< ";while(!pq.empty()){auto c=pq.top(); pq.pop(); _print(c); cerr<<" ";} cerr<<">";}
//===============================================================MAIN CODE=============================================================================================
#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> val,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);
            val.push_back(mn);
        }
    }
    sort(all(val),greater<int>());
    rep(i,0,3){
        if(val.size()>i) mx_val[i]=val[i];
    }
    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...