Pagini recente » Cod sursa (job #1678246) | Cod sursa (job #471868) | Cod sursa (job #1284272) | Cod sursa (job #1237980) | Cod sursa (job #1243007)
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>
#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX
#define INF INT_MAX/2
using namespace std;
vector <PII> g[50001];
PII q;
int t[50001],d[50001],j,i,n,l,x,y,Min,k,c,m;
bool sel[50001];
void dijkstra ( int p)
{ int i,k;
for(i=1; i<=n; i++)
{
d[i]=(i==p) ? 0 :INF;
t[i]=0;
sel[i]=false;
}
for(i=1; i<=n; i++)
{
Min=INF;
for(j=1; j<=n; j++)
{
if(Min>d[j]&&!sel[j])
{
Min=d[j];
k=j;
}
}
sel[k]=true;
vector <PII> ::iterator it;
for(it=g[k].begin(); it!=g[k].end(); it++)
{
x=(*it).S;
c=(*it).F;
if (d[x]>d[k] + c && !sel[x])
{
d[x]=d[k]+c;
t[x]=k;
}
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1; i<=m; i++)
{
scanf("%d %d %d",&x,&y,&l);
q.F=l;
q.S=y;
g[x].PB(q);
}
dijkstra(1);
for(i=2; i<=n; i++)
{
if(d[i]!=INF) printf("%d ",d[i]); else printf("0 ");
}
return 0;
}