Pagini recente » Cod sursa (job #793630) | Cod sursa (job #689710) | Cod sursa (job #789954) | Cod sursa (job #963435) | Cod sursa (job #1923366)
#include <bits/stdc++.h>
#define weight first
#define node second
#define mp make_pair
#define INF 1e8
#define buffs 1048576
using namespace std;
vector < pair <int,int> > Q;
vector < pair <int,int> > G[50001];
pair <int,int> u;
char buff[buffs];
int viz[50001]={0};
int n, m,pos=0;
int d[50001];
FILE *f=freopen("dijkstra.in","r",stdin);
inline void read(int &x)
{
while( buff[pos]<'0'||buff[pos]>'9') if(++pos==buffs) fread(buff,1,buffs,stdin),pos=0;
x=0;
while( buff[pos]>='0'&&buff[pos]<='9')
{
x=(x<<1)+(x<<3)+buff[pos]-'0';
if(++pos==buffs) fread(buff,1,buffs,stdin),pos=0;
}
}
struct cmp
{
bool operator()(const pair<int, int>& a, const pair<int, int>& b)
{
return a.weight > b.weight;
}
};
void init()
{ d[1]=0;
viz[1]=1;
for(int i=2;i<=n;i++) d[i]=INF;
}
void read_data()
{
int x,y,c;
fread(buff,1,buffs,stdin);
read(n);read(m);
for(int i=1;i<=m;i++)
{
read(x);read(y);read(c);
G[x].push_back( mp(c,y) );
}
}
void dijkstra()
{
for(auto it:G[1]) Q.push_back(it),push_heap(Q.begin(), Q.end(),cmp()),d[it.node] = it.weight;
while(!Q.empty())
{
u=Q[0];
pop_heap(Q.begin(),Q.end(),cmp());
Q.pop_back();
if(viz[u.node] == 0)
{
viz[u.node]=1;
for(auto v :G[u.node])
{
if(viz[v.node]==0 && d[v.node]>d[u.node]+v.weight)
{
d[v.node]=d[u.node]+v.weight;
Q.push_back(mp( d[v.node] , v.node));
push_heap(Q.begin(),Q.end(),cmp());
}
}
}
}
}
void write_result()
{
freopen("dijkstra.out", "w", stdout);
for(int i=2;i<=n;i++)
if(d[i]==INF) cout<<"0 ";
else cout<<d[i]<<' ';
}
int main()
{
read_data();
init();
dijkstra();
write_result();
}