Pagini recente » Monitorul de evaluare | Cod sursa (job #1382993) | Cod sursa (job #2500463) | Cod sursa (job #1218384) | Cod sursa (job #2670660)
#include <bits/stdc++.h>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define NMAX 250005
using namespace std;
FILE *fin = fopen("dijkstra.in" , "r");
FILE *fout = fopen("dijkstra.out" , "w");
int n , m , d[50005];
vector <pair <int , int> > muchii[NMAX];
vector <pair <int , int> > :: iterator it;
inline bool cmp(int a , int b)
{
return (d[a] < d[b]);
}
set <int , bool (*)(int , int)> s(cmp);
void dijkstra()
{
d[1] = 0;
s.insert(1);
while(!s.empty())
{
int p = *s.begin();
s.erase(p);
for(it = muchii[p].begin() ; it != muchii[p].end() ; it ++)
if(d[p] + (*it).second < d[(*it).first])
{
s.erase((*it).first);
d[(*it).first] = d[p] + (*it).second;
s.insert((*it).first);
}
}
}
int main()
{
IOS
fscanf(fin , "%d%d" , &n , &m);
for(int i = 1 ; i <= m ; i ++)
{
int x , y , cost;
fscanf(fin , "%d%d%d" , &x , &y, &cost);
muchii[x].push_back({y , cost});
}
for(int i = 1 ; i <= n ; i ++) d[i] = 1e9 + 10;
dijkstra();
for(int i = 1 ; i <= n ; i ++)
if(d[i] == 1e9 + 10)
d[i] = 0;
for(int i = 2 ; i <= n ; i ++)
fprintf(fout , "%d " , d[i]);
return 0;
}