Pagini recente » Cod sursa (job #3245385) | Cod sursa (job #247786) | Cod sursa (job #3264131) | Cod sursa (job #2609977) | Cod sursa (job #1846530)
#include <fstream>
#include <vector>
#include <list>
#include <map>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int main()
{
int n,m;
vector<map<int,int>> A;
vector<bool> v;
fin>>n>>m;
A.resize(n);
v.resize(n);
while(m--)
{
int a,b,c;
fin>>a>>b>>c;
A[a-1].emplace(b-1,c);
}
multimap<int,int> d;
d.emplace(0,0);
v[0]=true;
while(d.size())
{
int c=d.begin()->second;
d.erase(d.begin());
for(map<int,int>::iterator i=A[c].begin();i!=A[c].end();i++)
{
int key=i->first;
if(A[0][key]==0||A[0][c]+A[c][key]<=A[0][key])
{
map<int,int>::iterator aux=d.find(A[0][key]);
A[0][key]=A[0][c]+A[c][key];
if(v[key]==false)
{
d.emplace(A[0][key],key);
v[key]=true;
}
else
{
while(aux->second!=key) aux++;
d.erase(aux);
d.emplace(A[0][key],key);
}
}
}
}
for(int i=1;i<n;i++) fout<<A[0][i]<<" ";
return 0;
}