Pagini recente » Cod sursa (job #3188555) | Cod sursa (job #3258824) | Cod sursa (job #3270897) | Cod sursa (job #2581969) | Cod sursa (job #486681)
Cod sursa(job #486681)
// infoarena: problema/dijkstra //
#include <fstream>
#include <queue>
#include <vector>
#define MAXN 50010
#define MAXM 250010
#define INF (unsigned long)1<<31
using namespace std;
ifstream in("date.in");
ofstream out("date.out");
unsigned long n,m,i,j,a,b,c,len[MAXM],fin[MAXM],dist[MAXN],next;
struct cmp
{
inline bool operator() (unsigned long a, unsigned long b) const
{
return dist[a] > dist[b];
}
};
vector<unsigned long> g[MAXN];
vector<unsigned long>::iterator it;
priority_queue<unsigned long, vector<unsigned long>, cmp > q;
bool viz[MAXN];
int main()
{
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>a>>b>>c;
g[a].push_back(i);
len[i]=c;
fin[i]=b;
}
viz[1]=true;
for(i=2; i<=n; i++)
dist[i] = INF;
for(it=g[1].begin(); it!=g[1].end(); it++)
dist[fin[*it]] = len[*it], q.push(fin[*it]);
while(!q.empty())
{
do
{next = q.top(); q.pop();}
while(!q.empty() && viz[next]);
if(viz[next])
break;
viz[next]=true;
for(it=g[next].begin(); it!=g[next].end(); it++)
if(dist[fin[*it]] >= dist[next]+len[*it])
dist[fin[*it]] = dist[next]+len[*it], q.push(fin[*it]);
}
for(i=2; i<=n; i++)
out<<(dist[i]!=INF ? dist[i] : 0)<<' ';
return 0;
}