Pagini recente » Cod sursa (job #712802) | Cod sursa (job #2106725) | Cod sursa (job #1601547) | Cod sursa (job #1336663) | Cod sursa (job #1205129)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <ctype.h>
#define pp pair<int,int>
#define inf 100000000
using namespace std;
int n,m,x,y,c,s,i,*d,z,lg,j;
char *b;
vector<pp> G[50005];
class comp
{
public:
bool operator() (const int& a, const int& b)
{
return (d[a]>d[b]);
}
};
priority_queue<int, vector<int> ,comp> Q;
void init()
{
fseek(stdin,0,SEEK_END);
lg=ftell(stdin);
rewind(stdin);
b=(char*) calloc(lg,sizeof(char));
fread(b,1,lg,stdin);
for (i=0;isdigit(b[i]);i++) n=n*10+b[i]-'0';
for (z=i+1;isdigit(b[z]);z++) m=m*10+b[z]-'0';
s=1;
Q.push(s);
for(j=1;j<=m;j++)
{
x=y=c=0;
for (i=z+1;isdigit(b[i]);i++) x=x*10+b[i]-'0';
z=i;
for (i=z+1;isdigit(b[i]);i++) y=y*10+b[i]-'0';
z=i;
for (i=z+1;isdigit(b[i]);i++) c=c*10+b[i]-'0';
z=i;
G[x].push_back(pp(y,c));
}
free(b);
d=(int*) calloc(n+2,sizeof(int));
for (i=1;i<=n;i++) d[i]=inf;
d[s]=0;
}
void dijkstra()
{
while(!Q.empty())
{
x = Q.top();
Q.pop();
z = G[x].size();
for(i=0;i<z;i++)
{
y = G[x][i].first;
c = G[x][i].second;
if(d[y] > d[x] + c)
{
d[y] = d[x] + c;
Q.push(y);
}
}
}
}
int main()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
init();
dijkstra();
for(i=2;i<=n;i++)
{
if (d[i]!=inf) printf("%i",d[i]);
else printf("0");
if (i<n) printf(" ");
}
fclose(stdin);
fclose(stdout);
return 0;
}