Pagini recente » Cod sursa (job #2795482) | Cod sursa (job #34719) | Cod sursa (job #2444703) | Cod sursa (job #3210280) | Cod sursa (job #1134067)
#include<cstdio>
#include<climits>
#include<vector>
#include<set>
using namespace std;
typedef vector<int>v;
typedef pair<int,int>p;
typedef vector<p>vp;
typedef vp::iterator it;
int n,m,s,t;
vp ve[50001];
v d(50001,INT_MAX);
void Dijkstra()
{
set<p> q;
d[1]=0;
q.insert( p(0,1) );
while( !q.empty() )
{
p top=*q.begin();
q.erase( q.begin() );
int dr,co;
dr=top.second;
co=top.first;
for(it i=ve[dr].begin();i!=ve[dr].end();i++)
{
int vec,cost;
vec=i->first;
cost=i->second;
if(d[vec]>d[dr]+cost)
{
if(d[vec]!=INT_MAX)
q.erase( q.find( p(d[vec],vec) ) );
d[vec]=d[dr]+cost;
q.insert( p(d[vec],vec) );
}
}
}
};
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
int a,b,c;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
ve[a].push_back( p(b,c) );
ve[b].push_back( p(a,c) );
}
Dijkstra();
for(int i=2;i<=n;i++)
printf("%d ",d[i]);
return 0;
}