제출 #1273445

#제출 시각아이디문제언어결과실행 시간메모리
1273445zuz14악어의 지하 도시 (IOI11_crocodile)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
#include "crocodile.h"
#define F first
#define S second
using namespace std;
    
vector<pair<int, int>> g[100007];
int times[100007];
bool if_exit[100007];

int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]){
    priority_queue<pair<long long, int>> q;
    int dist;
    int v;

    for (int i=0; i<m; i++) {g[r[i][0]].push_back({r[i][1], l[i]}); g[r[i][1]].push_back({r[i][0], l[i]});}
    for (int i=0; i<n; i++) times[i]=-1;

    q.push({0, 0});
    while (!q.empty()){
        dist=-q.top().F, v=q.top().S; q.pop();
        if (times[v]!=-1) continue;
        times[v]=dist;

        for (auto i:g[v]) if (times[i.F]==-1) q.push({-dist-i.S, i.F});
    }
    
    for (int i=0; i<k; i++) if_exit[p[i]]=1;

    int c;
    int result=1e18, m1, m2;
    for (int i=0; i<n; i++){
        c=0;
        if (if_exit[i]) continue;
        for (auto j:g[i]) {
            if (if_exit[j.F]) {
                c++; //ha ha ha
                if (j.S<=m1) m2=m1, m1=j.S;
                else if (j.S<=m2) m2=j.S;
            }
        }
        if (c>=2) result=min(result, times[i]+m2);
    }

    return result;
}

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

crocodile.cpp: In function 'int travel_plan(int, int, int (*)[2], int*, int, int*)':
crocodile.cpp:31:16: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   31 |     int result=1e18, m1, m2;
      |                ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...