Pagini recente » Cod sursa (job #823485) | Cod sursa (job #651758) | Cod sursa (job #1935520) | Cod sursa (job #1444513) | Cod sursa (job #3346052)
#include <vector>
#include <algorithm>
#include <climits>
#include <iostream>
#include <fstream>
#include <climits>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct Node
{
int id,w;
};
const int maxS=50005;
int dis[maxS];
vector<Node> adj[maxS];
struct Cmp
{
bool operator()(const Node& a,const Node& b)
{
return a.w > b.w;
// are a prioritate mai mica decat b? Daca da, a e trimis la final, b la inceput
}
};
priority_queue<Node, vector<Node>, Cmp> pq;
int main()
{
int m,n;
fin>>n>>m;
for(int i=2;i<=n;++i)
dis[i]=INT_MAX;
dis[1]=0;
for(int i=1;i<=m;++i)
{
int a,b,c;
fin>>a>>b>>c;
Node n1,n2;
n1.w=c;
n1.id=a;
n2.w=c;
n2.id=b;
adj[b].push_back(n1);
adj[a].push_back(n2);
}
Node start;
start.w=dis[1];
start.id=1;
pq.push(start);
while(!pq.empty())
{
// while(!pq.empty() and dis[pq.top().id]!=INT_MAX)
// {
// pq.pop();
// }
int curr=pq.top().id;
pq.pop();
for(auto n: adj[curr])
{
if(dis[n.id]==INT_MAX) // if uncompleted
{
n.w=dis[curr]+n.w;
pq.push(n);
}
}
if(dis[pq.top().id]==INT_MAX)
dis[pq.top().id]=pq.top().w;
}
for(int i=2;i<n;++i)
{
fout<<min(INT_MAX,dis[i])<<' ';
}
fout<<min(INT_MAX,dis[n]);
return 0;
}