Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- #include<vector>
- #include<queue>
- #define NM 100001
- #define INF 2000010
- #include<stdio.h>
- using namespace std;
- ifstream fin("dijkstra2.in");
- ofstream fout("dijkstra2.out");
- int n, m, p, d[NM], inq[NM];
- struct pereche {
- int y,c;
- };
- struct compar {
- bool operator()(int x,int y) {
- return d[x]>d[y];
- }
- };
- vector<pereche> G[NM];
- priority_queue <int, vector<int>, compar> q;
- void Citeste() {
- int i, x, y, c;
- pereche u;
- fin>>n>>m>>p;
- for (i=1; i<=m; ++i) {
- fin>>x>>y>>c;
- u.y=y;
- u.c=c;
- G[x].push_back(u);
- u.y=x;
- G[y].push_back(u);
- }
- }
- void Dijkstra(int x0) {
- int z,lg,i;
- for (i=1; i<=n; i++) d[i]=INF;
- d[x0]=0;
- inq[x0]=1;
- q.push(x0);
- while (!q.empty()) {
- int j,im,y,c;
- im=q.top();
- q.pop();
- inq[im]=0;
- for(j=0; j<G[im].size(); j++) {
- y=G[im][j].y;
- c=G[im][j].c;
- lg=d[im]+c;
- if(lg<d[y]) {
- d[y]=lg;
- if(inq[y]==0) {
- inq[y]=1;
- q.push(y);
- }
- }
- }
- }
- }
- void Scrie() {
- int i;
- for (i=1; i<=n; ++i)
- if(d[i]<INF)
- fout<<d[i]<<" ";
- else fout<<-1<<' ';
- }
- int main() {
- Citeste();
- Dijkstra(p);
- Scrie();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment