Pagini recente » Cod sursa (job #1096779) | Cod sursa (job #2785755) | Cod sursa (job #1210320) | Cod sursa (job #1943845) | Cod sursa (job #1114302)
#include <cstdio>
#include <vector>
#include <utility>
#include <set>
#define INF 51000000
using namespace std;
struct vecini
{
vector <int> nod;
vector <int> val;
};
multiset< pair <int,int> > h;
multiset< pair <int,int> >::iterator it;
vecini g[50009];
bool viz[50009];
int rasp[50009];
int main()
{
int n,m,x,y,z,i,nod_cur;pair <int , int> aux;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
g[x].nod.push_back(y);
g[x].val.push_back(z);
}
rasp[1]=0;
viz[1]=true;
aux.first=0;
aux.second=1;
h.insert(aux);
for(i=2;i<=n;i++)
{
rasp[i]=INF;
aux.first=INF;
aux.second=i;
h.insert(aux);
}
nod_cur=1;
while(h.empty()==0)
{
for(i=0;i<g[nod_cur].nod.size();i++)
{
if(rasp[nod_cur]+g[nod_cur].val[i]<rasp[g[nod_cur].nod[i]]&&viz[g[nod_cur].nod[i]]==false)
{
aux.first=rasp[g[nod_cur].nod[i]];
aux.second=g[nod_cur].nod[i];
h.erase(aux);
rasp[g[nod_cur].nod[i]]=rasp[nod_cur]+g[nod_cur].val[i];
aux.first=rasp[g[nod_cur].nod[i]];
h.insert(aux);
}
}
aux=*h.begin();
viz[aux.second]=true;
h.erase(aux);
aux=*h.begin();
nod_cur=aux.second;
}
for(i=2;i<=n;i++)
{
if(rasp[i]==INF)
printf("%d ",0);
else
printf("%d ",rasp[i]);
}
return 0;
}