Pagini recente » Cod sursa (job #2246130) | Cod sursa (job #1844222) | Cod sursa (job #1999154) | Cod sursa (job #643517) | Cod sursa (job #2452640)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("catun.in");
ofstream fout("catun.out");
int n, m, k, f, sol[36004];
bool b[36003];
struct name{
int x, dist;
};
struct name2{
int x, dist, o;
};
class Compare{
public:
bool operator() (name2 x, name2 y)
{
return x.dist>y.dist||(x.dist==y.dist&&x.o>y.o);
}
};
vector<name> g[36003];
priority_queue<name2, vector<name2>, Compare> q;
int main()
{
fin>>n>>m>>k;
for(int i=1;i<=k;++i)
{
int x;
fin>>x;
name2 var;
var.x=x, var.dist=0, var.o=x;
q.push(var);
//cout<<var.x<<" "<<var.dist<<" "<<var.o<<"\n";
}
for(int i=1;i<=m;++i)
{
int x, y, z;
fin>>x>>y>>z;
name var;
var.dist=z;
var.x=y;
g[x].push_back(var);
var.x=x;
g[y].push_back(var);
}
while(!q.empty())
{
while(!q.empty()&&b[q.top().x]) q.pop();
if(q.empty()) break;
name2 nod=q.top();
//cout<<nod.x<<" "<<nod.dist<<" "<<nod.o<<"\n";
q.pop();
b[nod.x]=1;
sol[nod.x]=nod.o;
if(nod.x==nod.o) sol[nod.x]=0;
for(int i=0;i<g[nod.x].size();++i)
{
name2 var;
var.x=g[nod.x][i].x;
var.dist=g[nod.x][i].dist+nod.dist;
var.o=nod.o;
//cout<<var.x<<" "<<var.dist<<" "<<var.o<<"\n";
q.push(var);
}
//cout<<"\n";
}
for(int i=1;i<=n;++i) fout<<sol[i]<<" ";
return 0;
}