답안 #289578

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
289578 2020-09-02T18:31:40 Z Doxeno 꿈 (IOI13_dreaming) C++17
0 / 100
57 ms 11768 KB
#include <bits/stdc++.h>
#include "dreaming.h"
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;

const ll MOD = 1000000007;
const int MAXN = 100010;

vector<pii> adj[MAXN];
int sub[MAXN], diam, m1[MAXN], m2[MAXN], og[MAXN];

bool vis[MAXN];

void dfs(int node){
    vis[node] = 1;
    for(auto x: adj[node]){
        if(vis[x.fi])continue;
        dfs(x.fi);
        sub[node] = max(sub[x.fi] + x.se,sub[node]);
    }
}

int reroot(int node){
    vis[node] = 1;
    for(auto x: adj[node]){
        if(sub[x.fi]+x.se>=m1[node]){
            m2[node] = m1[node];
            m1[node] = sub[x.fi]+x.se;
        }else if(sub[x.fi]+x.se > m2[node]){
            m2[node] = sub[x.fi]+x.se;
        }
    }
    diam = max(diam, m1[node] + m2[node]);
    int ans = m1[node]; og[node] = sub[node];
    for(auto x: adj[node]){
        if(vis[x.fi])continue;
        if(m1[node] == sub[x.fi]+x.se)sub[node] = m2[node];
        else sub[node] = m1[node];
        ans = min(ans,reroot(x.fi));
        sub[node] = og[node];
    }
//    cout << "node "<<node <<" m1 "<<m1[node]<<"\n";
    return ans;
}

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 k,m=0,mm=0, mmm = 0;
    for(int i = 0; i < N; i++)if(!vis[i])dfs(i);
    for(int i = 0; i < N; i++)vis[i] = 0;
    for(int i = 0; i < N; i++)if(!vis[i]){
        k = reroot(i);
    //    cout << "i "<<i <<" k "<<k<<"\n";
        if(k >= m){
            mmm = mm; mm = m; m = k;
        }else if(k >= mm){
            mmm = mm; mm = k;
        }else if(k > mmm){
            mmm = k;
        }

    }
    return max({2*L+mmm+mm, L + m+mm, diam});
}
/*
int main(){
    int a,b,c;
    cin >> a >> b >> c;
    int k[b],j[b],l[b];
    for(int i = 0; i < b; i++){
        cin >> k[i] >> j[i] >> l[i];
    }
    cout << travelTime(a,b,c,k,j,l)<<"\n";


}
*/
/*
12 8 2
0 8 4
8 2 2
2 7 4
5 11 3
5 1 7
1 3 1
1 9 5
10 6 3
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 11768 KB Output is correct
2 Correct 55 ms 11640 KB Output is correct
3 Correct 39 ms 9680 KB Output is correct
4 Correct 10 ms 3968 KB Output is correct
5 Correct 7 ms 3584 KB Output is correct
6 Correct 15 ms 4736 KB Output is correct
7 Incorrect 2 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 11768 KB Output is correct
2 Correct 55 ms 11640 KB Output is correct
3 Correct 39 ms 9680 KB Output is correct
4 Correct 10 ms 3968 KB Output is correct
5 Correct 7 ms 3584 KB Output is correct
6 Correct 15 ms 4736 KB Output is correct
7 Incorrect 2 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 11768 KB Output is correct
2 Correct 55 ms 11640 KB Output is correct
3 Correct 39 ms 9680 KB Output is correct
4 Correct 10 ms 3968 KB Output is correct
5 Correct 7 ms 3584 KB Output is correct
6 Correct 15 ms 4736 KB Output is correct
7 Incorrect 2 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 7040 KB Output is correct
2 Correct 30 ms 7040 KB Output is correct
3 Correct 33 ms 6944 KB Output is correct
4 Correct 27 ms 7072 KB Output is correct
5 Correct 28 ms 7040 KB Output is correct
6 Correct 29 ms 7288 KB Output is correct
7 Correct 33 ms 7288 KB Output is correct
8 Correct 28 ms 6904 KB Output is correct
9 Correct 28 ms 6912 KB Output is correct
10 Correct 27 ms 7168 KB Output is correct
11 Correct 2 ms 2688 KB Output is correct
12 Correct 4 ms 4352 KB Output is correct
13 Correct 4 ms 4352 KB Output is correct
14 Correct 4 ms 4352 KB Output is correct
15 Correct 4 ms 4352 KB Output is correct
16 Correct 4 ms 4224 KB Output is correct
17 Correct 4 ms 3712 KB Output is correct
18 Correct 4 ms 4352 KB Output is correct
19 Correct 4 ms 4352 KB Output is correct
20 Incorrect 2 ms 2688 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 11768 KB Output is correct
2 Correct 55 ms 11640 KB Output is correct
3 Correct 39 ms 9680 KB Output is correct
4 Correct 10 ms 3968 KB Output is correct
5 Correct 7 ms 3584 KB Output is correct
6 Correct 15 ms 4736 KB Output is correct
7 Incorrect 2 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 11768 KB Output is correct
2 Correct 55 ms 11640 KB Output is correct
3 Correct 39 ms 9680 KB Output is correct
4 Correct 10 ms 3968 KB Output is correct
5 Correct 7 ms 3584 KB Output is correct
6 Correct 15 ms 4736 KB Output is correct
7 Incorrect 2 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -