Pagini recente » Monitorul de evaluare | Cod sursa (job #2884397) | Cod sursa (job #2327802) | Cod sursa (job #715741) | Cod sursa (job #3344237)
#include <fstream>
#define NMAX 50001
#define MMAX 250001
#define INF 1e9
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,start=1;
struct varf
{
int x,c;
friend bool operator < (varf a,varf b);
};
bool operator < (varf a, varf b)
{
return a.c>b.c;
}
vector<varf> G[NMAX];
priority_queue<varf> H;
int pre[NMAX],cmin[NMAX];
bool uz[NMAX];
void dijkstra();
int main()
{
int i,x,y,c;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x>>y>>c;
G[x].push_back({y,c});
}
dijkstra();
for(i=2;i<=n;i++)
if(cmin[i]==INF) fout<<0<<' ';
else fout<<cmin[i]<<' ';
return 0;
}
void dijkstra()
{
int i,vf,vfmin,c,cost;
for(i=1;i<=n;i++) {pre[i]=start; cmin[i]=INF;}
pre[start]=cmin[start]=0;
H.push({start,0});
while(!H.empty())
{
vfmin=H.top().x;
c=H.top().c; H.pop();
if(uz[vfmin]) continue;
uz[vfmin]=1;
for(i=0;i<G[vfmin].size();i++)
{
vf=G[vfmin][i].x;
cost=G[vfmin][i].c;
if(!uz[vf] && cmin[vf]>cmin[vfmin]+cost)
{
cmin[vf]=cmin[vfmin]+cost;
pre[vf]=vfmin;
H.push({vf,cmin[vf]});
}
}
}
}