Cod sursa(job #1661459)

Utilizator kappykkDragos kappykk Data 23 martie 2016 21:26:37
Problema Pitici Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#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();
}