Pagini recente » Cod sursa (job #1701342) | Cod sursa (job #323445) | Cod sursa (job #1770583) | Cod sursa (job #2127651) | Cod sursa (job #633221)
Cod sursa(job #633221)
#include <stdio.h>
#include <deque>
#include <vector>
using namespace std;
const int maxn=50001;
const int inf=1073741824;
int n, m, s, cost[maxn];
struct rec{
int ind;
int cost;
}x;
deque<int> coada;
vector<rec> vecini[maxn];
int drum[maxn];
char viz[maxn];
int u;
void citire()
{
int a,b,c;
scanf("%d %d ",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d %d %d ", &a, &b, &c);
x.ind=b;
x.cost=c;
vecini[a].push_back(x);
}
}
void dijkstra()
{
for (int i=2;i<=n;i++)
drum[i]=inf;
int val,min=0;
for (int i=1;i<=n;i++)
{
val=inf;
for (int j=1;j<=n;j++)
if (drum[j] < val && !viz[j])
val = drum[j], u=j;
viz[u]=1;
for (vector<rec>::iterator it=vecini[u].begin();it!=vecini[u].end();it++)
if (drum[it->ind]>it->cost+val)
drum[it->ind]=it->cost+val;
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
dijkstra();
for (int i=2;i<=n;i++)
printf("%d ", drum[i]<inf ? drum[i] : 0);
printf("\n");
return 0;
}