Pagini recente » Cod sursa (job #152568) | Cod sursa (job #2671552) | Cod sursa (job #2501740) | Cod sursa (job #916853) | Cod sursa (job #638638)
Cod sursa(job #638638)
#include <fstream>
#include <vector>
#include <cstring>
#include <deque>
#include <queue>
#include <iostream>
using namespace std;
#define pb push_back
struct nod {
int cost, nodt;
}a;
struct cmp
{
bool operator()(const nod &a,const nod &b) const
{
return a.cost > b.cost;
}
};
vector<int> gt[1024];
vector<nod> gp[1024];
deque<int> dq;
priority_queue<nod, vector<nod>, cmp> heap;
int nd[1024], ord[1024], pd[1024][1024], dat[1024][1024], poz[1024], n, m, k, p = 0;
void sortare() {
int i, nod;
for(i = 1; i <= n; ++i)
if(nd[i] == 0)
dq.pb(i);
while(!dq.empty()) {
nod = dq[0];
ord[++p] = nod;
dq.pop_front();
for(i = 0; i < gt[nod].size(); ++i) {
--nd[gt[nod][i]];
if(nd[gt[nod][i]] == 0)
dq.pb(gt[nod][i]);
}
}
}
int main()
{
int i, j, x, y, c, ales, t;
ifstream f("pitici.in");
ofstream g("pitici.out");
f >> n >> m >> k;
for(i = 1; i <= m; ++i) {
f >> x >> y >> c;
gt[x].pb(y);
++nd[y];
dat[y][x] = c;
gp[y].pb(nod{c, x});
}
sortare();
pd[1][0] = 1;
for(i = 2; i <= n; ++i) {
memset(poz, 0, sizeof(poz));
ales = ord[i]; t = 0;
for(j = 0; j < gp[ales].size(); ++j)
heap.push(nod{pd[gp[ales][j].nodt][++poz[gp[ales][j].nodt]] + gp[ales][j].cost, gp[ales][j].nodt});
while(!heap.empty() && t <= k) {
++t;
pd[ales][0] = t;
a = heap.top();
heap.pop();
pd[ales][t] = a.cost;
++poz[a.nodt];
if(pd[a.nodt][0] >= poz[a.nodt]) {
heap.push(nod{pd[a.nodt][poz[a.nodt]] + dat[ales][a.nodt], a.nodt});
}
}
}
for(i = 1; i <= k; ++i)
g << pd[ales][i] << ' ';
g.close();
return 0;
}