답안 #893120

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
893120 2023-12-26T14:26:47 Z raul2008487 꿈 (IOI13_dreaming) C++17
0 / 100
69 ms 65536 KB
#include<bits/stdc++.h>
#include "dreaming.h"
#define ll long long
#define pll pair<ll,ll>
#define vl vector<ll>
#define fi first
#define se second
#define in insert
#define all(v) v.begin(),v.end()
const int sz = 100005;
const ll inf = 1000000000000000;
using namespace std;
vector<pair<ll,ll>> adj[sz];
ll dis[sz][2], center, v1, v2, mx, cnt = -1;
bool used[sz];
vector<vector<ll>> path;
void trav(ll node){
    used[node] = 1;
    path[cnt].push_back(node);
    for(pll edge: adj[node]){
        if(!used[edge.fi]){
            trav(edge.fi);
        }
    }
}
void dfs(ll node, ll we = 0, ll p = -1){
    if(we > mx){
        v2 = node;
        mx = we;
    }
    for(pll edge: adj[node]){
        if(edge.fi != p){
            dfs(edge.fi, we + edge.se, node);
        }
    }
}
void caldis(ll node, ll type, ll we = 0, ll p = -1){
    dis[node][type] = we;
    for(pll edge: adj[node]){
        if(edge.fi != p){
            caldis(edge.fi, we + edge.se, node, type);
        }
    }
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    ll n = N, m = M, i, j;
    for(i=1;i<=m;i++){
        adj[A[i]].push_back({B[i], T[i]});
        adj[B[i]].push_back({A[i], T[i]});
    }
    for(i=0;i<n;i++){
        if(!used[i]){
            cnt++;
            path.push_back(vl(0));
            trav(i);
        }
    }
    multiset<ll> ms;
    ll res = -inf;
    for(i=0;i<=cnt;i++){
        mx = -inf, v1 = -1, v2 = -1;
        dfs(path[i][0]);
        mx = -inf;
        v1 = v2;
        dfs(v1);
        caldis(v1, 0);
        caldis(v2, 1);  
        ll pc = path[i][0], pb = max(dis[pc][0], dis[pc][1]);
        for(ll x: path[i]){
            if (max(dis[x][0], dis[x][1]) < max(dis[pc][0], dis[pc][1])) pc = x;
        }
        ms.in( max(dis[pc][0], dis[pc][1]) );
        res = max(res, mx);
        //ans = max(ans, pb);
    }
    if (cnt == 0) return max(res, *ms.begin());
    auto it = ms.end();
    it--;
    it--;
    auto it1 = it;
    it1--;
    if (cnt == 1){ return max(res, *ms.rbegin() + *it + L);}
    return max({res, *ms.rbegin() + *it + L, *it + *it1 + 2*L});
}

Compilation message

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:68:29: warning: unused variable 'pb' [-Wunused-variable]
   68 |         ll pc = path[i][0], pb = max(dis[pc][0], dis[pc][1]);
      |                             ^~
dreaming.cpp:46:25: warning: unused variable 'j' [-Wunused-variable]
   46 |     ll n = N, m = M, i, j;
      |                         ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 69 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 39 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 69 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 47 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 39 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 69 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -