This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "factories.h"
#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
#define LL long long
#define pii pair<int,int>
#define pil pair<int,LL>
#define plii pair<LL,pii>
#define ff first
#define ss second
#define INF (LL)9e18
using namespace std;
int n;
LL dist[555555];
vector<pil> edge[555555];
priority_queue<plii,vector<plii>,greater<plii> > pq;
void Init(int N, int A[], int B[], int D[]) {
n=N;
for(int i=1;i<N;i++){
edge[A[i]].push_back({B[i],D[i]});
edge[B[i]].push_back({A[i],D[i]});
}
}
long long Query(int S, int X[], int T, int Y[]) {
for(int i=0;i<n;i++) dist[i]=INF;
for(int i=0;i<T;i++) pq.push({0,{Y[i],i}}),dist[Y[i]]=0;
while(!pq.empty()){
int p=pq.top().ss.ff;
int pd=pq.top().ff;
int pi=pq.top().ss.ss;
pq.pop();
for(int i=0;i<edge[p].size();i++){
if(dist[edge[p][i].ff]>dist[p]+edge[p][i].ss){
dist[edge[p][i].ff]=dist[p]+edge[p][i].ss;
pq.push({dist[edge[p][i].ff],{edge[p][i].ff,pi}});
}
}
}
LL ans=0;
for(int i=0;i<S;i++) ans+=dist[X[i]];
return ans;
}
Compilation message (stderr)
factories.cpp: In function 'long long int Query(int, int*, int, int*)':
factories.cpp:40:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<edge[p].size();i++){
~^~~~~~~~~~~~~~~
factories.cpp:36:13: warning: unused variable 'pd' [-Wunused-variable]
int pd=pq.top().ff;
^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |