Pagini recente » Cod sursa (job #2613459) | Cod sursa (job #2550915) | Cod sursa (job #3172322) | Cod sursa (job #1892245) | Cod sursa (job #1564610)
#include <bits/stdc++.h>
#define Nmax 1050
#define pb push_back
using namespace std;
int dp[Nmax][Nmax],n,k,v[Nmax],c[Nmax],wh[Nmax],vec[Nmax],l;
bool viz[Nmax];
struct Edge
{
int nod,cost;
bool operator <(const Edge &A) const
{
return cost>A.cost;
}
};
vector <Edge> L[Nmax],T[Nmax];
priority_queue <Edge> Q;
inline void Solve(int nod)
{
while(!Q.empty()) Q.pop();
int len=0,ind=1,i;
Edge w;
for(auto it : T[nod])
{
v[++len]=it.nod; c[it.nod]=it.cost;
wh[it.nod]=1;
}
for(i=1;i<=len;++i)
{
w.nod=v[i]; w.cost=dp[v[i]][1]+c[v[i]];
Q.push(w);
}
while(!Q.empty() && ind<=k)
{
w=Q.top(); Q.pop();
dp[nod][ind]=w.cost;
++wh[w.nod];
if(dp[w.nod][wh[w.nod]]!=-1)
{
w.cost=dp[w.nod][wh[w.nod]]+c[w.nod];
Q.push(w);
}
++ind;
}
dp[nod][ind]=-1;
}
inline void Dfs(int nod)
{
viz[nod]=true;
for(auto it : L[nod])
if(!viz[it.nod]) Dfs(it.nod);
vec[++l]=nod;
}
int main()
{
int m,x,y,z,i;
Edge w;
ifstream cin("pitici.in");
ofstream cout("pitici.out");
cin>>n>>m>>k;
while(m--)
{
cin>>x>>y>>w.cost;
w.nod=y; L[x].pb(w);
w.nod=x; T[y].pb(w);
}
dp[1][2]=-1;
Dfs(1);
for(i=n-1;i;--i) Solve(vec[i]);
for(i=1;i<=k;++i) cout<<dp[n][i]<<" ";
cout<<"\n";
return 0;
}