Pagini recente » Cod sursa (job #2065500) | Cod sursa (job #1644361) | Cod sursa (job #2431533) | Cod sursa (job #1548016) | Cod sursa (job #584754)
Cod sursa(job #584754)
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
#define oo 2147483647
#define to first
#define cost second
#define mp make_pair
FILE *f = fopen("dijkstra.in","r");
FILE *g = fopen("dijkstra.out","w");
int d[50001];
struct cmp
{ bool operator ()(int i,int j)
{ if(d[i] < d[j]) return 1;
return 0;
}
};
priority_queue<int,vector<int>,cmp>q;
int main()
{ int i,j,x,y,c;
int N,M;
vector<pair<int,int> >a[50001];
bool in[50001];
fscanf(f,"%d %d",&N,&M);
for(i = 1; i <= M; i++)
{ fscanf(f,"%d %d %d",&x,&y,&c);
a[x].push_back(mp(y,c));
}
for(i = 2; i <= N; i++)
d[i] = oo , in[i] = 0;
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) fprintf(g,"%d ",d[i]);
else fprintf(g,"%d ",0);
fclose(f);
fclose(g);
return 0;
}