Pagini recente » Cod sursa (job #2630762) | Cod sursa (job #2171616) | Cod sursa (job #111198) | Cod sursa (job #3240120) | Cod sursa (job #3276248)
#include <fstream>
#include<vector>
#include<set>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int inf=0x3f3f3f3f;
struct nod
{
int vecin,cost;
bool operator < (const nod &other) const
{
if(cost!=other.cost)
return cost<other.cost;
return vecin<other.vecin;
}
};
vector<nod>G[50005];
vector<int>dmin;
set<nod>S;
int n,p;
void dijkstra(int st)
{
dmin=vector<int>(n+1,inf);
dmin[st]=0;S.insert({st,0});
while(!S.empty())
{
int nd=S.begin()->vecin;
S.erase(S.begin());
for(auto&i:G[nd])
{
int costpos=i.cost+dmin[nd];
if(costpos<dmin[i.vecin])
{
if(dmin[i.vecin]!=inf)S.erase({i.vecin,dmin[i.vecin]});
S.insert({i.vecin,costpos});
dmin[i.vecin]=costpos;
}
}
}
}
int main()
{int x,y,c;
cin>>n>>p;
while(cin>>x>>y>>c)
{
G[x].push_back({y,c});
}
dijkstra(p);
for(int i=1;i<=n;i++)
if(dmin[i]==inf)cout<<-1<<" ";
else cout<<dmin[i]<<" ";
return 0;
}