제출 #172307

#제출 시각아이디문제언어결과실행 시간메모리
172307ho94949꿈 (IOI13_dreaming)C++17
100 / 100
142 ms17924 KiB
#include<bits/stdc++.h>
using namespace std;

#include "dreaming.h"
const int MAXN = 101010;
vector<pair<int, int>> conn[MAXN];
int dis1[MAXN];
int dis2[MAXN];
bool vis[MAXN];
vector<int> comp;
void dfs(int a, int pa, int d, int *dis, bool pcomp)
{
    if(pcomp) comp.push_back(a);
    dis[a] = d;
    for(auto [x, w]: conn[a])
        if(x != pa)
            dfs(x, a, d+w, dis, pcomp);
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    for(int i=0; i<M; ++i)
    {
        conn[A[i]].emplace_back(B[i], T[i]);
        conn[B[i]].emplace_back(A[i], T[i]);
    }
    
    int ans = 0;
    vector<int> rads;
    int tp = 1;
    for(int i=0; i<N; ++i)
    {
        if(vis[i]) continue;
        dfs(i, -1, 0, dis1, true);
        int maxd = 0;
        int maxi = i;
        for(auto x: comp)
            if(dis1[x]>maxd)
            {
                maxd = dis1[x];
                maxi = x;
            }
        
        int d1 = maxi;
        dfs(d1, -1, 0, dis2, false);
        maxd = 0; maxi = d1;
        for(auto x: comp)
        {
            if(dis2[x]>maxd)
            {
                maxd = dis2[x];
                maxi = x;
            }
        }
        int d2 = maxi;
        dfs(d2, -1, 0, dis1, false);

        int diam = dis1[d1];
        int rad = diam;
        for(auto x: comp)
            rad = min(rad, max(dis1[x], dis2[x]));

        ans = max(ans, diam);
        rads.push_back(rad);

        for(auto x: comp) vis[x] = true;
        comp.clear();
    }

    sort(rads.rbegin(), rads.rend());

    if(rads.size() >= 2)
        ans = max(ans, rads[0] + rads[1] + L);
    
    if(rads.size() >= 3)
        ans = max(ans, rads[1] + rads[2] + 2*L);

    return ans;
}


















컴파일 시 표준 에러 (stderr) 메시지

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:28:9: warning: unused variable 'tp' [-Wunused-variable]
     int tp = 1;
         ^~
#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...