답안 #735103

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
735103 2023-05-03T14:47:44 Z sandry24 꿈 (IOI13_dreaming) C++17
32 / 100
95 ms 16472 KB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define pb push_back
#define mp make_pair
#define f first
#define s second

#include "dreaming.h"

vector<vector<pi>> adj(1e5+1);
vector<bool> visited(1e5+1);
vi parent(1e5+1), dists(1e5+1);

ll maxe = -1, maxnode = -1;

void dfs(ll x, ll p=-1, ll dist=0){
    visited[x] = 1;
    parent[x] = p;
    dists[x] = dist;
    if(dist > maxe){
        maxe = dist;
        maxnode = x;
    }
    for(auto i : adj[x]){
        if(i.f != p)
            dfs(i.f, x, dist + i.s);
    }
}

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]});
    }
    vector<pair<ll, ll>> centers;
    for(int i = 0; i < N; i++){
        if(!visited[i]){
            maxe = -1, maxnode = -1;
            dfs(i);
            ll n1 = maxnode;
            maxe = -1, maxnode = -1;
            dfs(n1);
            ll n2 = maxnode;
            vector<pair<ll, ll>> path;
            while(n2 != n1){
                path.pb({n2, dists[n2]});
                n2 = parent[n2];
            }
            path.pb({n2, dists[n2]});
            reverse(path.begin(), path.end());
            ll diameter = path.back().second;
            ll best_diff = 1e18, best_node = -1, best_dist = -1;
            for(int i = 0; i < path.size(); i++){
                if(abs(diameter - 2 * path[i].s) < best_diff){
                    best_diff = abs(diameter - 2 * path[i].s);
                    best_node = path[i].f;
                    best_dist = max((ll)path[i].s, diameter - path[i].s);
                }
            }
            centers.pb({best_dist, best_node});
        }
    }
    sort(centers.begin(), centers.end(), greater<pair<ll, ll>>());
    for(int i = 1; i < centers.size(); i++){
        adj[centers[0].s].pb({centers[i].s, L});
        adj[centers[i].s].pb({centers[0].s, L});
    }
    dfs(0);
    maxe = -1;
    dfs(maxnode);
    return dists[maxnode];
}

Compilation message

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:59:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             for(int i = 0; i < path.size(); i++){
      |                            ~~^~~~~~~~~~~~~
dreaming.cpp:70:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |     for(int i = 1; i < centers.size(); i++){
      |                    ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 16448 KB Output is correct
2 Correct 61 ms 16472 KB Output is correct
3 Correct 35 ms 11784 KB Output is correct
4 Correct 12 ms 5460 KB Output is correct
5 Correct 8 ms 4532 KB Output is correct
6 Correct 15 ms 6488 KB Output is correct
7 Correct 2 ms 3412 KB Output is correct
8 Correct 34 ms 7972 KB Output is correct
9 Correct 39 ms 9860 KB Output is correct
10 Correct 2 ms 3540 KB Output is correct
11 Correct 62 ms 11644 KB Output is correct
12 Correct 64 ms 14432 KB Output is correct
13 Correct 3 ms 3540 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3468 KB Output is correct
3 Correct 3 ms 3460 KB Output is correct
4 Correct 2 ms 3412 KB Output is correct
5 Correct 2 ms 3412 KB Output is correct
6 Incorrect 2 ms 3412 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 16448 KB Output is correct
2 Correct 61 ms 16472 KB Output is correct
3 Correct 35 ms 11784 KB Output is correct
4 Correct 12 ms 5460 KB Output is correct
5 Correct 8 ms 4532 KB Output is correct
6 Correct 15 ms 6488 KB Output is correct
7 Correct 2 ms 3412 KB Output is correct
8 Correct 34 ms 7972 KB Output is correct
9 Correct 39 ms 9860 KB Output is correct
10 Correct 2 ms 3540 KB Output is correct
11 Correct 62 ms 11644 KB Output is correct
12 Correct 64 ms 14432 KB Output is correct
13 Correct 3 ms 3540 KB Output is correct
14 Correct 2 ms 3412 KB Output is correct
15 Correct 2 ms 3468 KB Output is correct
16 Correct 3 ms 3460 KB Output is correct
17 Correct 2 ms 3412 KB Output is correct
18 Correct 2 ms 3412 KB Output is correct
19 Incorrect 2 ms 3412 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 43 ms 8624 KB Output is correct
2 Correct 43 ms 8744 KB Output is correct
3 Correct 40 ms 8528 KB Output is correct
4 Correct 55 ms 8596 KB Output is correct
5 Correct 40 ms 8564 KB Output is correct
6 Correct 51 ms 9336 KB Output is correct
7 Correct 51 ms 8760 KB Output is correct
8 Correct 44 ms 8456 KB Output is correct
9 Correct 46 ms 8516 KB Output is correct
10 Correct 60 ms 8768 KB Output is correct
11 Correct 2 ms 3412 KB Output is correct
12 Correct 24 ms 8900 KB Output is correct
13 Correct 20 ms 8900 KB Output is correct
14 Correct 19 ms 8908 KB Output is correct
15 Correct 27 ms 8832 KB Output is correct
16 Correct 20 ms 8880 KB Output is correct
17 Correct 23 ms 8876 KB Output is correct
18 Correct 20 ms 8952 KB Output is correct
19 Correct 21 ms 8884 KB Output is correct
20 Correct 2 ms 3412 KB Output is correct
21 Correct 2 ms 3468 KB Output is correct
22 Correct 3 ms 3596 KB Output is correct
23 Correct 23 ms 8900 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3468 KB Output is correct
3 Correct 3 ms 3460 KB Output is correct
4 Correct 2 ms 3412 KB Output is correct
5 Correct 2 ms 3412 KB Output is correct
6 Incorrect 2 ms 3412 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 16448 KB Output is correct
2 Correct 61 ms 16472 KB Output is correct
3 Correct 35 ms 11784 KB Output is correct
4 Correct 12 ms 5460 KB Output is correct
5 Correct 8 ms 4532 KB Output is correct
6 Correct 15 ms 6488 KB Output is correct
7 Correct 2 ms 3412 KB Output is correct
8 Correct 34 ms 7972 KB Output is correct
9 Correct 39 ms 9860 KB Output is correct
10 Correct 2 ms 3540 KB Output is correct
11 Correct 62 ms 11644 KB Output is correct
12 Correct 64 ms 14432 KB Output is correct
13 Correct 3 ms 3540 KB Output is correct
14 Correct 2 ms 3412 KB Output is correct
15 Correct 2 ms 3468 KB Output is correct
16 Correct 3 ms 3460 KB Output is correct
17 Correct 2 ms 3412 KB Output is correct
18 Correct 2 ms 3412 KB Output is correct
19 Incorrect 2 ms 3412 KB Output isn't correct
20 Halted 0 ms 0 KB -