Pagini recente » Sandbox (cutiuţa cu năsip) | Cod sursa (job #1824292) | Cod sursa (job #780024) | Cod sursa (job #1052484) | Cod sursa (job #2575661)
#include<fstream>
#include<queue>
using namespace std;
const int NLIMIT = 50005;
const int oo = (1 << 30);
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector < pair<int, int> > Edges[NLIMIT];
int N, M;
int D[NLIMIT];
bool inQueue[NLIMIT];
struct CMP {
bool operator() (int X, int Y)
{
return D[X] > D[Y];
}
};
priority_queue <int, vector<int>, CMP> Q;
void read()
{
fin >> N >> M;
int X, Y, C;
for (int i = 0; i < M; i ++)
{
fin >> X >> Y >> C;
Edges[X].push_back(make_pair(Y, C));
}
}
void dijkstra()
{
for (int i = 1; i <= N; i ++)
D[i] = oo;
D[1] = 0;
Q.push(1);
inQueue[1] = true;
while (!Q.empty())
{
int Node = Q.top();
Q.pop();
inQueue[Node] = false;
for (int i = 0; i < Edges[Node].size(); i ++)
{
int Next = Edges[Node][i].first;
int Price = Edges[Node][i].second;
if (D[Node] + Price < D[Next])
{
D[Next] = D[Node] + Price;
if (!inQueue[Next])
{
Q.push(Next);
inQueue[Next] = true;
}
}
}
}
}
void write()
{
for (int i = 2; i <= N; i ++)
if (D[i] != oo)
fout << D[i] << " ";
}
int main()
{
read();
dijkstra();
write();
return 0;
}