Pagini recente » Cod sursa (job #2678482) | Cod sursa (job #57451) | Cod sursa (job #2927602) | Cod sursa (job #2871079) | Cod sursa (job #1105613)
#include <cstdio>
#include <vector>
#include <functional>
#include <queue>
using namespace std;
#define inf 999999
#define dmax 50001
#define pb push_back
#define x first
#define y second
typedef pair<int, int> pi;
vector <pi> v[dmax];
int d[dmax], n, m;
bool use[dmax];
class compare
{
public:
bool operator()(const int &a,const int &b)
{
return d[a]>d[b];
}
};
priority_queue<int,vector<int>,compare>q;
void read()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int a, b, c;
scanf("%i %i ",&n, &m);
for(int i=1; i<=m; i++)
{
scanf("%i %i %i", &a, &b, &c);
v[a].pb(make_pair(c, b));
}
}
void dijkstra(int x)
{
for(int i=1; i<=n; i++)
d[i]=inf;
q.push(x);
d[1]=0;
while(!q.empty())
{
int a=q.top();
q.pop();
//if(a.x<=d[a.y] || a.y==1)
for(int i=0; i<v[a].size(); i++)
{
pi h=v[a][i];
if(d[h.y]>h.x+d[a])
{
d[h.y]=h.x+d[a];
q.push(v[a][i].y);
// heap.pb(v[a.y][i]);
// push_heap(heap.begin(), heap.end());
}
}
}
}
void printd()
{
for(int i=2;i<=n;i++)
if(d[i]!=inf)
printf("%i ", d[i]);
else printf("0 ");
printf("\n");
}
int main()
{
read();
dijkstra(1);
printd();
return 0;
}