Pagini recente » Cod sursa (job #1940808) | Cod sursa (job #173257) | Cod sursa (job #471815) | Cod sursa (job #67235) | Cod sursa (job #3176853)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pitici.in");
ofstream fout("pitici.out");
int n,m,k;
int a,b,c;
int viz[1020],out[1020];
vector <pair <int,int>> g[1020];
vector <int> ord;
int dp[1020][1020],cnt[1020],costEdge[1020];
void dfs(int nod)
{
viz[nod]=1;
for(auto p:g[nod])
if(viz[p.first]==0)
dfs(p.first);
ord.push_back(nod);
}
priority_queue <pair <int,int>,vector <pair <int,int>>,greater <pair <int,int>>> h;
int main()
{
fin>>n>>m>>k;
for(int i=1; i<=m; i++)
{
fin>>a>>b>>c;
g[a].push_back(make_pair(b,c));
out[a]++;
}
dfs(1);
for(int i=1; i<=n; i++)
for(int j=1; j<=k; j++)
dp[i][j]=1e9;
for(auto u:ord)
{
if(out[u]==0)
{
if(u==n)
dp[u][1]=0;
continue;
}
while(!h.empty())
h.pop();
for(auto e:g[u])
{
int v=e.first,c=e.second;
h.push(make_pair(dp[v][1]+c,v));
costEdge[v]=c;
cnt[v]=2;
}
for(int i=1; i<=k; i++)
{
pair <int,int> aux=h.top();
h.pop();
h.push(make_pair(dp[aux.second][cnt[aux.second]++]+costEdge[aux.second],aux.second));
dp[u][i]=min(dp[u][i],aux.first);
}
}
for(int i=1; i<=k; i++)
fout<<dp[1][i]<<" ";
fout<<"\n";
return 0;
}