Pagini recente » Cod sursa (job #1285236) | Cod sursa (job #2927110) | Cod sursa (job #1809849) | Cod sursa (job #1480484) | Cod sursa (job #1088831)
#include<cstdio>
#include<vector>
#include<set>
#include<climits>
using namespace std;
vector < pair <int,int> > v[50005];
set < pair <int,int> > S;
set < pair <int,int> >::iterator it;
int n,m,s,x,y,c,D[50005];
int main()
{
int i;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
D[0]=INT_MAX/2;
S.insert(make_pair(0,1));
for (i=2;i<=n;++i)
D[i]=INT_MAX/2, S.insert(make_pair(INT_MAX/2,i));
for (i=0;i<m;++i)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back(make_pair(c,y));
}
while (!S.empty())
{
it=S.begin();
s=it->second;
D[s]=it->first;
S.erase(it);
for (i=0;i<v[s].size();++i)
{
it=S.find( make_pair(D[v[s][i].second],v[s][i].second) );
if (it!=S.end())
{
c=it->first, x=it->second;
c=min(c,D[s]+v[s][i].first);
S.erase(it);
S.insert(make_pair(c,x));
D[x]=c;
}
}
}
for (i=2;i<=n;++i)
if (D[i]!=INT_MAX/2) printf("%d ",D[i]);
else printf("0 ");
printf("\n");
return 0;
}