답안 #430683

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
430683 2021-06-16T18:24:42 Z muhammad_hokimiyon 꿈 (IOI13_dreaming) C++14
0 / 100
1000 ms 12100 KB
#include "dreaming.h"
#include <bits/stdc++.h>

#define fi first
#define se second
#define ll long long
#define dl double

using namespace std;

const int maxN = 1e5 + 7;

int val,v1,ve;
int d[maxN];
int u[maxN];
bool used[maxN];
vector<pair<int, int>> v[maxN];

void dfs1(int x, int p)
{
        used[x] = true;
        for(auto y : v[x]){
                if(y.fi == p)continue;
                dfs1(y.fi, x);
                d[x] = max(d[x], d[y.fi] + y.se);
        }
}

void dfs2(int x, int p)
{
        int mx1 = -1, mx2 = -1;
        int v1 = -1, v2 = -1;
        for(auto y : v[x]){
                if(y.fi == p)continue;
                if(d[y.fi] > mx1){
                        if(mx1 > mx2){
                                mx2 = mx1;
                                v2 = v1;
                        }
                        mx1 = d[y.fi];
                        v1 = y.fi;
                }else if(d[y.fi] > mx2){
                        mx2 = d[y.fi];
                        v2 = y.fi;
                }
        }
        if(max(u[x], d[x]) > val){
                v1 = x;
        }
        val = min(val, max(u[x], d[x]));
        for(auto y : v[x]){
                if(y.fi == p)continue;
                u[y.fi] = max(u[y.fi], u[x]);
                if(y.fi == v1)u[y.fi] = max(u[y.fi], mx1 + y.se);
                else u[y.fi] = max(u[y.fi], mx2 + y.se);
                dfs2(y.fi, x);
        }
}

void dfs(int x, int p, int sum)
{
        used[x] = true;
        if(sum >= val){
                val = sum;
                ve = x;
        }
        for(auto y : v[x]){
                if(y.first != p){
                        dfs(y.first, x, sum + y.second);
                }
        }
}

int travelTime(int N, int M, int L, int A[], int B[], int T[])
{
        for(int i = 0; i < M; i++){
                v[A[i]].push_back({B[i], T[i]});
                v[B[i]].push_back({A[i], T[i]});
        }
        vector<pair<int, int>> X;
        for(int i = 0; i < N; i++){
                if(!used[i]){
                        val = 1e9;
                        dfs1(i, i);
                        dfs2(i, i);
                        X.push_back({val, v1});
                }
        }
        sort(X.rbegin(), X.rend());
        for(int i = 1; i < (int)X.size(); i++){
                v[X[0].second].push_back({X[i].second, L});
                v[X[i].second].push_back({X[0].second, L});
        }
        val = ve = 0;
        dfs(0, 0, 0);
        val = 0;
        dfs(ve, ve, 0);
        return val;
}

Compilation message

dreaming.cpp: In function 'void dfs2(int, int)':
dreaming.cpp:32:22: warning: variable 'v2' set but not used [-Wunused-but-set-variable]
   32 |         int v1 = -1, v2 = -1;
      |                      ^~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 68 ms 12100 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 68 ms 12100 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1083 ms 7368 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 68 ms 12100 KB Output isn't correct
2 Halted 0 ms 0 KB -