Pagini recente » Cod sursa (job #939434) | Cod sursa (job #1831965) | Cod sursa (job #590310) | Cod sursa (job #649491) | Cod sursa (job #1008473)
#include <algorithm>
#include <cstring>
#include <bitset>
#include <cstdio>
#include <vector>
#include <queue>
#define v second
#define cost first
using namespace std;
const int inf = 0x3f3f3f3f;
const int Nmax = 500001;
struct cmp{
bool operator()(const pair<int,int> A,const pair<int,int> B)const
{
if ( A.cost > B.cost) return 1;
return 0;
}
};
priority_queue< pair <int,int> , vector < pair <int,int> > , cmp > Q;
vector< pair <int,int> > lv[ Nmax ];
vector< pair <int,int> > ::iterator it;
bitset< Nmax > viz;
int n,m,D[ Nmax ];
void read_data()
{
scanf("%d%d",&n,&m);
int a,b,c;
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&a,&b,&c);
lv[a].push_back(make_pair(c,b));
}
memset(D,inf,sizeof(D));
D[ 1 ] = 0;
}
void dijkstra()
{
Q.push(make_pair(0,1));
int k ;
while(!Q.empty())
{
k = Q.top().v;
viz[ k ] = 1;
Q.pop();
for(it = lv[k].begin();it != lv[k].end(); ++it)
if(D[it->v] > D[k] + it->cost && !viz[it->v])
{
D[it->v]=D[k]+it->cost;
Q.push(make_pair(D[it->v] ,it->v));
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read_data();
dijkstra();
for(int i=2;i<=n;++i)
if(D[i]!=inf) printf("%d ",D[i]);
else printf("0 ");
return 0;
}