Cod sursa(job #3269946)

Utilizator tudor_costinCostin Tudor tudor_costin Data 21 ianuarie 2025 15:39:27
Problema Pitici Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>

using namespace std;
ifstream fin("pitici.in");
ofstream fout("pitici.out");
const int Nmax=1050,inf=1e9;
bitset<Nmax> viz;
int dp[Nmax][Nmax];
vector<pair<int,int>> v[Nmax];
int n,k;
struct copil
{
    int val;
    int x;
    int cnt;
    int cost;
    bool operator <(const copil cmp) const
    {
        return val>cmp.val;
    }
};
void dfs(int nod)
{
    viz[nod]=1;
    if(nod==n)
    {
        dp[nod][1]=0;
        return;
    }
    if(v[nod].empty()) return;
    for(auto pi:v[nod])
    {
        int u=pi.first;
        if(viz[u]) continue;
        dfs(u);
    }
    priority_queue<copil> ans;
    for(auto pi:v[nod])
    {
        int u=pi.first;
        int c=pi.second;
        ans.push({dp[u][1]+c,u,1,c});
    }
    for(int i=1;i<=k;i++)
    {
        copil best=ans.top();
        ans.pop();
        dp[nod][i]=best.val;
        best.cnt++;
        best.val=dp[best.x][best.cnt]+best.cost;
        ans.push(best);
    }
    return;
}
int main()
{
    int m;
    fin>>n>>m>>k;
    for(int i=1;i<=m;i++)
    {
        int x,y,c;
        fin>>x>>y>>c;
        v[x].push_back({y,c});
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=k;j++) dp[i][j]=inf;
    }
    dfs(1);
    for(int i=1;i<=k;i++) fout<<dp[1][i]<<' ';
    return 0;
}