#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> Pa;
const int maxN=100100,inf=0x7fffffff;
struct edge{int v,d,nxt;}a[20*maxN];
int dis[maxN],head[maxN],best[maxN];
int cnt=0;
priority_queue<Pa,vector<Pa>,greater<Pa> > Q;
void add(int u,int v,int d){
a[++cnt].v=v;
a[cnt].d=d;
a[cnt].nxt=head[u];
head[u]=cnt;
if (d<a[best[u]].d)best[u]=cnt;
// printf("edge#%d u:%d v:%d d:%d\n",cnt,u,a[cnt].v,a[cnt].d);
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
a[0].d=inf;
for (int i=0;i<N;i++){best[i]=0;dis[i]=inf;head[i]=-1;}
for (int i=0;i<M;i++){
add(R[i][0],R[i][1],L[i]);
add(R[i][1],R[i][0],L[i]);
}
dis[0]=0;
Q.push(make_pair(0,0));
while(!Q.empty()){
int D=Q.top().first,u=Q.top().second;Q.pop();
if (D>dis[u])continue;
for (int i=head[u];i!=-1;i=a[i].nxt){
if (i==best[u])continue;
int v=a[i].v;
if (dis[v]>dis[u]+a[i].d){
dis[v]=dis[u]+a[i].d;
Q.push(make_pair(dis[v],v));
}
}
}
int ans=inf;
for (int i=0;i<K;i++)ans=min(ans,dis[P[i]]);
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |