Pagini recente » Cod sursa (job #116570) | Cod sursa (job #2742514) | Cod sursa (job #1603552) | Cod sursa (job #1180802) | Cod sursa (job #584755)
Cod sursa(job #584755)
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
#define oo 2147483647
#define to first
#define cost second
#define mp make_pair
#define DIM 8192
int N,M;
vector<pair<int,int> >a[50001];
int d[50001];
bool in[50001];
char pp[8192],*p = pp;
struct cmp
{ bool operator ()(int i,int j)
{ if(d[i] < d[j]) return 1;
return 0;
}
};
priority_queue<int,vector<int>,cmp>q;
void read(int &x)
{ x = 0;
while(*p < '0' || *p > '9')
{ p++;
if(*p == NULL) fread(pp,1,DIM,stdin) , p = pp;
}
while(*p >= '0' && *p <= '9')
{ x = x * 10 + *p - '0' , p++;
if(*p == NULL) fread(pp,1,DIM,stdin) , p = pp;
}
}
int main()
{ int i,j,x,y,c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read(N); read(M);
for(i = 1; i <= M; i++)
{ read(x); read(y); read(c);
a[x].push_back(mp(y,c));
}
for(i = 2; i <= N; i++)
d[i] = oo;
d[1] = 0; q.push(1); in[1] = 1;
while(!q.empty())
{ x = q.top(); q.pop(); in[x] = 0;
for(int k = 0; k < a[x].size(); k++)
if(d[a[x][k].to] > d[x] + a[x][k].cost)
{ d[a[x][k].to] = d[x] + a[x][k].cost;
if(!in[a[x][k].to])
{ in[a[x][k].to] = 1; q.push(a[x][k].to); }
}
}
for(i = 2; i <= N; i++)
if(d[i] != oo) printf("%d ",d[i]);
else printf("%d ",0);
return 0;
}