Pagini recente » Cod sursa (job #496586) | Cod sursa (job #2713858) | Cod sursa (job #2887683) | Cod sursa (job #1963233) | Cod sursa (job #442385)
Cod sursa(job #442385)
#include<cstdio>
#include<set>
#include<vector>
#define pb push_back
#define mp make_pair
#define to first
#define cc second
#define cost first
#define index second
#define beg (*p.begin())
using namespace std;
const int N=50001,INF=1000000001;
multiset < pair<int,int> > p;
vector < pair<int,int> > v[N];
int n,m,c[N],s[N];
bool st[N];
void read()
{
int x,y,z;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
s[x]++;
s[y]++;
v[x].pb( mp(y,z) );
v[y].pb( mp(x,z) );
}
}
void ini()
{
for( int i=2 ; i<=n ; ++i )
c[i]=INF;
}
void check( int x )
{
for( int i=0 ; i<s[x] ; ++i )
if(!st[N] && c[x]+v[x][i].cc < c[ v[x][i].to ] )
{
c[v[x][i].to]=c[x]+v[x][i].cc;
p.insert( mp( c[ v[x][i].to ],v[x][i].to) );
}
}
void dk()
{
pair<int,int> x;
p.insert( mp(0,1) );
while( !p.empty() )
{
st[beg.index]=1;
check(beg.index);
p.erase(p.begin());
}
}
void print()
{
for( int i=2 ; i<=n ; ++i )
printf("%d ",( c[i]==INF ? 0 : c[i] ) );
printf("\n");
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read();
ini();
dk();
print();
return 0;
}