Pagini recente » Cod sursa (job #2637446) | Cod sursa (job #775845) | Cod sursa (job #1355195) | Cod sursa (job #2549812) | Cod sursa (job #2506465)
#include<bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
using namespace std;
typedef long long ll;
FILE *fin=fopen("dijkstra.in","r");
FILE *fout=fopen("dijkstra.out","w");
const int INF= 500*200000, N=50005;
int n, m, i, j, ans[N], x, y, z;
set<pair<int,int> > unsv;
set<pair<int,int> > ::iterator it, it2;
vector<pair<int,int> > v[N];
bool queued[N], used[N];
void dijk(int nod)
{
unsv.insert({0,1});
while(!unsv.empty())
{
it=unsv.begin();
nod=(*it).nd;
used[nod]=1;
unsv.erase(unsv.begin());
for(auto i:v[nod])
if(!used[i.st])
{
// cout<<"{"<<ans[i.st]<<' '<<i.st<<'\n';
if(queued[i.st])
{
it=unsv.find({ans[i.st],i.st});
ans[i.st]=min(ans[i.st],ans[nod]+i.nd);
unsv.insert({ans[i.st],i.st});
}
else
{
ans[i.st]=min(ans[i.st],ans[nod]+i.nd);
queued[i.st]=1;
unsv.insert({ans[i.st],i.st});
}
// cout<<ans[i.st]<<' '<<i.st<<"}\n";
}
}
}
int main()
{
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&z);
v[x].pb({y,z});
v[y].pb({x,z});
}
for(i=2;i<=n;i++)
ans[i]=INF;
dijk(1);
for(i=2;i<=n;i++)
{
if(ans[i]==INF)
fprintf(fout,"0 ");
else fprintf(fout,"%d ",ans[i]);
}
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
}