Pagini recente » Cod sursa (job #1919058) | Cod sursa (job #2032589) | Cod sursa (job #768849) | Cod sursa (job #1448893) | Cod sursa (job #2205076)
#include <fstream>
#include <vector>
#include <set>
#define Nmax 50002
#define inf 20000001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<pair<int,int> >muchii_graf[Nmax];
int n,m;
void Read()
{
fin>>n>>m;
int i,x,y,z;
for(i=1;i<=m;++i)
{
fin>>x>>y>>z;
muchii_graf[x].push_back(make_pair(y,z));
}
}
void Dijkstra(int s)
{
int i,x,cost;
set< pair<int,int> >S;
set< pair<int,int> >::iterator it;
vector<int>d(n+1);
for(i=1;i<=n;++i)
if(d[i]==0&&i!=s)
d[i]=inf;
for(auto nod:muchii_graf[s])
d[nod.first]=nod.second;
for(i=1;i<=n;++i)
if(i!=s)S.insert(make_pair(d[i],i));
while(!S.empty())
{
it=S.begin();
x=it->second;
cost=it->first;
S.erase(it);
for(auto nod:muchii_graf[x])
if(cost+nod.second<d[nod.first])
{
it=S.find(make_pair(d[nod.first],nod.first));
S.erase(it);
d[nod.first]=nod.second+cost;
S.insert(make_pair(d[nod.first],nod.first));
}
}
for(i=2;i<=n;++i)
if(d[i]==inf)fout<<"0 ";
else fout<<d[i]<<" ";
}
int main()
{
Read();
Dijkstra(1);
return 0;
}