Cod sursa(job #3002142)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 14 martie 2023 13:50:05
Problema Pitici Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("pitici.in");
ofstream fout("pitici.out");

const int dim=1e3+100,inf=1e8;

vector<pair<int,int>>adj[dim];
vector<pair<int,int>>rev_adj[dim];

bool visited[dim];
vector<int>TopSort;


void dfs(int x){
    visited[x]=true;
    for(auto[y,c]:adj[x]){
        if(!visited[y]){
            dfs(y);
        }
    }
    TopSort.push_back(x);
}

int n,m,k;
int dp[dim][dim];

signed main(){
        fin>>n>>m>>k;
    for(int i=1;i<=m;i++){
        int x,y,c;
        fin>>x>>y>>c;
        adj[x].push_back({y,c});
        rev_adj[y].push_back({x,c});
    }

    dfs(1);
    reverse(TopSort.begin(),TopSort.end());

    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++){
            dp[i][j]=inf;
        }
    }
    dp[TopSort[0]][1]=0;
    for(auto x:TopSort){
        priority_queue<int,vector<int>,greater<int>>pq;
        for(auto [y,c]:rev_adj[x]){
            for(int j=1;j<=k;j++){
                if(dp[y][j]!=inf){
                    pq.push({dp[y][j]+c});
                }
            }
        }
        int cnt=0;
        while(!pq.empty()&&cnt<k){
            dp[x][++cnt]=pq.top();
            pq.pop();
        }
    }
    for(int i=1;i<=k;i++){
        fout<<dp[n][i]<<' ';
    }
}