Pagini recente » Cod sursa (job #1689534) | Cod sursa (job #1644484) | Cod sursa (job #395749) | Cod sursa (job #155235) | Cod sursa (job #680140)
Cod sursa(job #680140)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define MAX_N 2001
#define mp make_pair
#define INF 9999999
int n,m,k,prieteni[MAX_N],d[MAX_N],t[MAX_N];
vector < pair<int,int> > gr[MAX_N];
void read(void)
{
freopen("ubuntzei.in","r",stdin);
int i,x,y,c;
scanf("%d %d %d",&n,&m,&k);
for(i=1; i<=k; i++)
scanf("%d",&prieteni[i]);
for(i=1; i<=m; i++)
{
scanf("%d %d %d",&x,&y,&c);
gr[x].push_back(mp(y,c));
gr[y].push_back(mp(x,c));
}
}
void bellman_ford(int start)
{
int i,x; queue<int> C;
vector < pair<int,int> > ::iterator it;
for(i=2; i<=n; i++)
d[i]=INF;
C.push(start);
while(!C.empty())
{
x=C.front();
C.pop();
for(it=gr[x].begin(); it!=gr[x].end(); it++)
if(d[it->first]>d[x]+it->second)
{
d[it->first]=d[x]+it->second;
t[it->first]=x;
C.push(it->first);
}
}
}
void build_path(int &cnt,int nod)
{
if(t[nod])
build_path(cnt,t[nod]);
cnt++;
}
void write(void)
{
int cnt=0;
freopen("ubuntzei.out","w",stdout);
build_path(cnt,n);
printf("%d",cnt);
}
int main()
{
read();
bellman_ford(1);
write();
return 0;
}