Pagini recente » Cod sursa (job #2588361) | Cod sursa (job #316795) | Cod sursa (job #1212297) | Cod sursa (job #1195047) | Cod sursa (job #1661459)
#include <bits/stdc++.h>
#define VM 1024
#define pii pair <int, int>
#define x first
#define y second
#define mp make_pair
using namespace std;
int n, m, k, a, b, c;
int d[VM][VM];
int f[VM], p[VM];
vector <int> sol[VM];
priority_queue< pii, vector< pii > , greater< pii > > heap;
ifstream fin("pitici.in");
ofstream fout("pitici.out");
void read(){
fin>>n>>m>>k;
for(int i = 1 ; i <= m ; ++i){
fin>>a>>b>>c;
d[b][a] = c;
}
}
void df(int nod){
if(f[nod])
return;
f[nod] = 1;
for(int i = 1 ; i <= n ; ++i)
if(d[nod][i])
df(i);
while(!heap.empty())
heap.pop();
for(int i = 1 ; i <= n ; ++i)
if(d[nod][i]){
if(sol[i].size()){
heap.push(mp(sol[i][0] + d[nod][i], i));
p[i] = 1;
}
}
for(int i = 1 ; i <= k && !heap.empty( ); ++i){
pii top = heap.top();
heap.pop();
sol[nod].push_back(top.x);
if(p[top.y] < sol[top.y].size())
heap.push(mp(sol[top.y][p[top.y]++] + d[nod][top.y] , top.y ));
}
}
void print(){
for(vector <int> :: iterator it = sol[n].begin(); it != sol[n].end(); ++it){
//cout<<*it<<" ";
fout<<*it<<" ";
}
}
int main()
{
read();
sol[1].push_back(0);
df(n);
print();
}