Pagini recente » Cod sursa (job #1611995) | Cod sursa (job #713388) | Cod sursa (job #3172034) | Cod sursa (job #1938211) | Cod sursa (job #405786)
Cod sursa(job #405786)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define nmax 50005
#define pb push_back
#define inf 1<<30
vector<int> g[nmax],c[nmax];
int viz[nmax],d[nmax];
int n,m,s=1;
void citire ()
{
freopen("dijkstra.in","r",stdin);
int i,a,b,cost;
scanf("%d %d\n", &n, &m);
for(i=1;i<=m;i++)
{
scanf("%d %d %d\n", &a, &b, &cost);
g[a].pb(b);
c[a].pb(cost);
}
}
struct comp
{
bool operator()(int i,int j)
{
return d[i]>d[j];
}
};
void dijkstra(int nod)
{
int i,k;
priority_queue<int,vector<int>,comp> q;
for(i=1;i<=n;i++)
d[i]=inf;
q.push(nod);
d[nod]=0;
while(!q.empty())
{
k=q.top();
viz[k]=0;
q.pop();
for(i=0;i<g[k].size();i++)
if(d[g[k][i]]>d[k]+c[k][i])
{
d[g[k][i]]=d[k]+c[k][i];
if(viz[g[k][i]]!=1)
q.push(g[k][i]),viz[g[k][i]]=1;
}
}
}
void scrie()
{
int i;
freopen("dijkstra.out","w",stdout);
for(i=2;i<=n;i++)
if(d[i]==inf) printf("%d ", 0);
else printf("%d ", d[i]);
}
int main ()
{
citire();
dijkstra(s);
scrie();
return 0;
}