제출 #741648

#제출 시각아이디문제언어결과실행 시간메모리
741648vjudge1꿈 (IOI13_dreaming)C++17
47 / 100
98 ms17176 KiB
#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > ng;
vector<int> dis;
vector<int> par;
int dfs(int ind, int pr = -1, int cds = 0) {
    par[ind] = pr;
    if (pr == -1)dis[ind] = 0;
    else dis[ind] = cds;
    int ret = ind;
    for (int i = 0; i < ng[ind].size(); i++) {
        int neg = ng[ind][i].first;
        int ds = ng[ind][i].second;
        if (neg == par[ind])continue;
        int gt = dfs(neg, ind, ds + cds);
        if (dis[gt] > dis[ret]) ret = gt;
    }
    return ret;
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
    priority_queue<pair<int, int> > pq;
    ng.resize(N);
    for (int i = 0; i < M; i++) {
        ng[A[i]].push_back(make_pair(B[i], T[i]));
        ng[B[i]].push_back(make_pair(A[i], T[i]));
    }
    dis.resize(N, 0);
    par.resize(N, -2);
    int rez = 0;
    vector<int> vals;
    for (int i = 0; i < N; i++) {
        if (par[i] != -2) continue;
        int far = dfs(i);
        int it = far = dfs(far);
        int ind = it, v2 = dis[far];
        while (par[it] != -1) {
            int v1 = max(dis[far] - dis[it], dis[it]);
            if (v1 < v2) {
                v2 = v1;
                ind = it;
            }
            it = par[it];
        }
        rez = max(rez, dis[far]);
        vals.push_back(v2);
    }
    sort(vals.begin(), vals.end());
    reverse(vals.begin(), vals.end());
    rez = max(rez, vals[0] + vals[1] + L);
    if (vals.size() > 2) rez = max(rez, vals[1] + vals[2] + L + L);
    return rez;
}

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

dreaming.cpp: In function 'int dfs(int, int, int)':
dreaming.cpp:12:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |     for (int i = 0; i < ng[ind].size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:36:13: warning: variable 'ind' set but not used [-Wunused-but-set-variable]
   36 |         int ind = it, v2 = dis[far];
      |             ^~~
#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...