제출 #1341335

#제출 시각아이디문제언어결과실행 시간메모리
1341335tsengangDreaming (IOI13_dreaming)C++20
0 / 100
33 ms13596 KiB
#include <bits/stdc++.h>
#include "dreaming.h"
#define ll long long
#define pb push_back
#define ertunt return
using namespace std;
vector<pair<ll,ll>> adj[200005];
bool vis[200005];
ll mx;
void dfs(ll x,ll p,ll cur,ll &g){
    if(cur>mx){
        mx=cur;
        g=x;
    }
    for(auto [y,w]:adj[x]){
        if(y!=p) dfs(y,x,cur+w,g);
    }
}
int travelTime(int n,int m,int l,int a[],int b[],int t[]){
    for(ll i=0;i<m;i++){
        adj[a[i]].pb({b[i],t[i]});
        adj[b[i]].pb({a[i],t[i]});
    }
    vector<ll> rad;
    ll ans=0;
    for(ll i=0;i<n;i++){
        if(!vis[i]){
            ll g=i;
            mx=0;
            dfs(i,-1,0,g);
            ll h=g;
            mx=0;
            dfs(g,-1,0,h);
            ll diam=mx;
            ans=max(ans,diam);
            ll r=(diam+1)/2;
            rad.pb(r);
            queue<ll> q;
            q.push(i);
            vis[i]=1;
            while(!q.empty()){
                ll x=q.front(); q.pop();
                for(auto [y,_]:adj[x]){
                    if(!vis[y]){
                        vis[y]=1;
                        q.push(y);
                    }
                }
            }
        }
    }
    sort(rad.begin(),rad.end(),greater<ll>());
    if(rad.size()>=2)
        ans=max(ans,rad[0]+rad[1]+l);
    if(rad.size()>=3)
        ans=max(ans,rad[1]+rad[2]+2*l);
    ertunt 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...