Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #1923495) | Monitorul de evaluare | Cod sursa (job #2852801) | Cod sursa (job #398567)
Cod sursa(job #398567)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define fs first
#define sc second
#define INF 1000000000000LL
typedef pair<int,int> PII;
vector <PII> nr[36010];
priority_queue <PII,vector<PII>, greater<PII> > H;
int n,m,k;
long long dist[36010];
int cet[36010];
void DJ(){
vector <bool> viz(36010,false);
int x;
while(!H.empty()){
x=H.top().sc;
H.pop();
if(viz[x])
continue;
viz[x]=true;
for(vector<PII>::iterator it=nr[x].begin();it!=nr[x].end();++it){
if(dist[it->fs]==dist[x]+it->sc && cet[x]<cet[it->fs])
cet[it->fs]=cet[x];
if(dist[it->fs]>dist[x]+it->sc){
dist[it->fs]=dist[x]+it->sc;
cet[it->fs]=cet[x];
H.push(PII(dist[it->fs],it->fs));
}
}
}
}
int main(){
freopen("catun.in","r",stdin);
freopen("catun.out","w",stdout);
int i,a,b,c;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;++i)
dist[i]=INF;
for(i=0;i<k;++i){
scanf("%d",&a);
H.push(PII(0,a));
cet[a]=a;
dist[a]=0;
}
for(i=0;i<m;++i){
scanf("%d%d%d",&a,&b,&c);
nr[a].push_back(PII(b,c));
nr[b].push_back(PII(a,c));
}
DJ();
for(i=1;i<=n;++i)
if(cet[i]==i)
printf("0 ");
else
printf("%d ",cet[i]);
fclose(stdin);
fclose(stdout);
return 0;
}