이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//#include "crocodile.h"
#include <stdio.h>
#include <stdlib.h>
#include<bits/stdc++.h>
using namespace std;
/*
#define MAX_N 100005
#define MAX_M 10000000
static int N, M;
static int R[MAX_M][2];
static int L[MAX_M];
static int K;
static int P[MAX_N];
static int solution;
inline 
void my_assert(int e) {if (!e) abort();}
void read_input()
{
  int i;
  my_assert(3==scanf("%d %d %d",&N,&M,&K));
  for(i=0; i<M; i++)
    my_assert(3==scanf("%d %d %d",&R[i][0],&R[i][1],&L[i]));
  for(i=0; i<K; i++)
    my_assert(1==scanf("%d",&P[i]));
  //my_assert(1==scanf("%d",&solution));
}
*/
vector<int> grafo[100005],peso[100005];
int sol[100005][2],n,m,tmp;
priority_queue<pair<int,int> > pq;
bool ok[100005];
/*
5 4 3
0 1 2
0 2 3
3 2 1
2 4 4
1
3
4
7 6 4
0 1 5
0 2 3
1 3 3
1 4 5
2 5 2
2 6 6
3 4 5 6
*/
void dfs(int nodo){
    
    for(int i=0;i<grafo[nodo].size();i++){
        
        if(sol[grafo[nodo][i]][0]==-1 || sol[grafo[nodo][i]][0]>(sol[nodo][1]+peso[nodo][i])){
            sol[grafo[nodo][i]][1]=sol[grafo[nodo][i]][0];
            sol[grafo[nodo][i]][0]=sol[nodo][1]+peso[nodo][i];
            if(sol[grafo[nodo][i]][1]!=-1){
                pq.push({-sol[grafo[nodo][i]][1],grafo[nodo][i]});
                ok[grafo[nodo][i]]=true;
            }
        }
        else{
            if(sol[grafo[nodo][i]][1]==-1 || sol[grafo[nodo][i]][1]>(sol[nodo][1]+peso[nodo][i])){
                sol[grafo[nodo][i]][1]=sol[nodo][1]+peso[nodo][i];
                pq.push({-sol[grafo[nodo][i]][1],grafo[nodo][i]});
                ok[grafo[nodo][i]]=true;
            }
        }
        
    }
    ok[nodo]=false;
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
    
    for(int i=0;i<M;i++){
        grafo[R[i][0]].push_back(R[i][1]);
        grafo[R[i][1]].push_back(R[i][0]);
        peso[R[i][0]].push_back(L[i]);
        peso[R[i][1]].push_back(L[i]);
    }
    
    for(int i=0;i<N;i++)sol[i][0]=sol[i][1]=-1;
    
    for(int i=0;i<K;i++){
        sol[P[i]][0]=sol[P[i]][1]=0;
        ok[P[i]]=true;
        pq.push({0,P[i]});
    }
    
    while(pq.size()>0){
        tmp=pq.top().second;
        pq.pop();
        
        if(ok[tmp]){
            dfs(tmp);
            ok[tmp]=false;
        }
        //if(tmp==0)break;
    }
    
    //for(int i=0;i<N;i++)cout<<sol[i][0]<<" "<<sol[i][1]<<endl;
    
    return sol[0][1];
}
/*
int main()
{
  int ans;
  read_input();
  ans = travel_plan(N,M,R,L,K,P);
  cout<<ans<<endl;
  if(ans==solution)
    printf("Correct.\n");
  else
    printf("Incorrect. Returned %d, Expected %d.\n",ans,solution);
  return 0;
}
*/
컴파일 시 표준 에러 (stderr) 메시지
crocodile.cpp: In function 'void dfs(int)':
crocodile.cpp:59:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<grafo[nodo].size();i++){
                 ~^~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |