Cod sursa(job #3328808)

Utilizator tonealexandruTone Alexandru tonealexandru Data 10 decembrie 2025 15:22:28
Problema Pitici Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1028;

vector<pair<int, int>> adj[NMAX];
vector<pair<int, int>> trans_adj[NMAX];
int grad[NMAX];
queue<int> q;

int f[NMAX];

int main() {
  ///WIP
    ifstream cin("pitici.in");
    ofstream cout("pitici.out");
    int n, m, k, a, b, val;
    cin>>n>>m>>k;

    vector<int> v[n+1];

    for(int i=0; i<m; i++) {
        cin>>a>>b>>val;

        adj[a].push_back({b, val});
        trans_adj[b].push_back({a, val});

        grad[b] ++;
    }

    for(int i=1; i<=n; i++)
        if(grad[i] == 0)
            q.push(i);

    v[1].push_back(0);

    while(q.empty() == false) {
        int curr = q.front();
        q.pop();

        sort(v[curr].begin(), v[curr].end());
        for(int i = 0; i < min(k, (int)v[curr].size()); i ++){
            int old_value = v[curr][i];

            priority_queue<pair<int, int>> temp;
            for(auto x : trans_adj[curr])
              temp.push({trans_adj[curr].first + trans_adj[curr].second, trans_adj[curr].first}); /// DE VERIFICAT

            for(auto x : trans_adj[curr]) {
                int new_value = old_value + x.second;

                int minn = temp.top();
                temp.pop();

                f[minn.second]++;
                temp.push() /// al f[minn.second] element
            }
        }


        for(auto x : adj[curr]) {
            grad[x.first]--;
            if(grad[x.first] == 0)
                q.push(x.first);
        }
    }


    sort(v[n].begin(), v[n].end());
    for(int i=0; i<k; i++)
      cout<<v[n][i]<<" ";


    return 0;
}