제출 #1212388

#제출 시각아이디문제언어결과실행 시간메모리
1212388nrg_studio꿈 (IOI13_dreaming)C++20
24 / 100
98 ms15688 KiB
#include <bits/stdc++.h>
#include "dreaming.h"
using namespace std;

#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define f first
#define s second
#define chmin(a, b) a = min(a,b)
#define chmax(a, b) a = max(a,b)
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define all(x) x.begin(),x.end()
#define vec vector

const int MAX_N = 1e5;
vec<pii> adj[MAX_N];
int dist[MAX_N];
bool vis[MAX_N];

pii furthest(int cur, int par=-1, int len=0) {
    vis[cur] = true;
    pii mx = {len,cur};
    for (auto[x,w] : adj[cur]) {
        if (x!=par) {
            chmax(mx,furthest(x,cur,len+w));
        }
    } return mx;
}

int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    for (int i=0;i<m;i++) {
        adj[a[i]].pb({b[i],t[i]});
        adj[b[i]].pb({a[i],t[i]});
    }
    int comps = n-m;
    while (comps!=1) {
        memset(vis,0,sizeof(vis));
        memset(dist,-1,sizeof(dist));
        int last = 0;
        for (int i=0,c=0;i<n;i++) {
            if (!vis[i]) {
                int d1 = furthest(i).s, d2 = furthest(d1).s;

                queue<pair<int,pii>> q;
                pii cent = {INT_MAX,0};
                q.push({d1,{0,0}}); q.push({d2,{0,0}});
                while (q.size()) {
                    auto[cur,z] = q.front(); q.pop();
                    auto[par,len] = z;
                    if (dist[cur]!=-1) {
                        chmin(cent,mp(max(len,dist[cur]),cur));
                    }
                    dist[cur] = len;
                    for (auto[x,w] : adj[cur]) {
                        if (x!=par) {
                            q.push({x,{cur,len+w}});
                        }
                    }
                }
                if ((c++)&1) {
                    adj[last].pb({cent.s,l});
                    adj[cent.s].pb({last,l});
                }
                last = cent.s;
            }
        } comps /= 2;
    }
    return furthest(furthest(0).s).f;
}
/*
int main() {
    ios::sync_with_stdio(false); cin.tie(0);

    int n,m,l;cin >> n >> m >> l;
    int a[m], b[m], t[m];
    F0R(i,n) {cin >> a[i] >> b[i] >> t[i];}
    cout << travelTime(n,m,l,a,b,t);
}*/
#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...