Pagini recente » Cod sursa (job #1184719) | Cod sursa (job #24702) | Cod sursa (job #2746782) | Cod sursa (job #1125341) | Cod sursa (job #1610967)
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMAX 1300
using namespace std;
int n,m,k,i,j,c,x,y,fiu,nr,nod;
int a[NMAX][NMAX],G[NMAX][NMAX],D[NMAX],top[NMAX];
bool viz[NMAX];
struct punct
{
int c,x,i;
}X;
vector<punct>H;
vector<int>v[NMAX];
punct pp(int a,int b,int c)
{
punct X;X.c=a;X.x=b;X.i=c;
return X;
}
bool cmp (const punct &p, const punct &r)
{
return p.c > r.c;
}
void dfs(int nod)
{
viz[nod]=1;
for(int i=0; i<v[nod].size();++i)
if(viz[v[nod][i]] == 0)
dfs(v[nod][i]);
top[++nr]=nod;
}
void sterge()
{
pop_heap(H.begin(), H.end(), cmp);
H.pop_back();
}
int main()
{
freopen("pitici.in","r",stdin);
freopen("pitici.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
v[y].push_back(x);
G[y][x]=c;
}
nr=0;
dfs(n);
for(int t=1; t<=nr; ++t)
{
nod=top[t];
H.clear();
for(i=0; i<v[nod].size(); ++i)
{
fiu=v[nod][i];
//bagaheap
X=pp(a[fiu][1]+G[nod][fiu],fiu,1);
H.push_back(X);
push_heap(H.begin(),H.end(),cmp);
}
while(H.size() > 0 && D[nod] < k)
{
X=H[0];
sterge();
a[nod][++D[nod]]=X.c;
if(X.i < D[X.x])
{
++X.i;
punct Y;
Y=pp(a[X.x][X.i]+G[nod][X.x],X.x,X.i);
H.push_back(Y);
push_heap(H.begin(),H.end(),cmp);
}
}
}
for(i=1; i<=k; ++i) printf("%d ",a[n][i]);
return 0;
}