Pagini recente » Cod sursa (job #1571497) | Concursul National de Soft Grigore Moisil Lugoj | Cod sursa (job #2233469) | Cod sursa (job #1709087) | Cod sursa (job #283931)
Cod sursa(job #283931)
#include <stdio.h>
#include <vector>
#include <set>
#define pb push_back
#define mp make_pair
#define maxn 1039
#define maxm 200039
using namespace std;
long n, m, i, j, k, a, b, c, ok, nod, cost, fiu, ccn, f[maxn], drumuri, coa[maxn], muc[maxn];
vector <long> v[maxn], co[maxn], inv[maxn];
multiset <long> d[maxn];
void df(long nod)
{
long ff=0;
f[nod]=1;
for(long y=0; y<v[nod].size(); y++)
{
if(f[v[nod][y]]==0) df(v[nod][y]);
ff=1;
}
if(ff==0)
{
ccn++;
coa[ccn]=nod;
// printf("%d ", nod);
}
}
int main()
{
multiset<long>::iterator it1, it2;
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
scanf("%d %d %d", &n, &m, &k);
f[1]=1;
for(i=1; i<=m; i++)
{
scanf("%d %d %d", &a, &b, &c);
v[a].pb(b);
muc[a]++;
co[a].pb(c);
inv[b].pb(a);
}
df(1);
for(i=1; i<=ccn; i++)
{
nod=coa[i];
for(j=0; j<inv[nod].size(); j++)
{
fiu=inv[nod][j];
muc[fiu]=muc[fiu]-1;
// printf("%d %d\n", fiu, muc[fiu]);
if(muc[fiu]==0)
{
ccn++;
coa[ccn]=fiu;
//printf("%d ", fiu);
}
}
}
d[1].insert(0);
for(i=ccn; i>0; i--)
{
nod=coa[i];
for(j=0; j<v[nod].size(); j++)
{
fiu=v[nod][j];
for(it1=d[nod].begin(); it1!=d[nod].end(); it1++)
{
cost=*it1;
d[fiu].insert(cost+co[nod][j]);
if(d[fiu].size()>k)
{
it2=d[fiu].end();
it2--;
d[fiu].erase(it2);
}
}
}
}
for(i=1, it1=d[n].begin(); i<=k; i++, it1++)
{
printf("%d ", *it1);
}
printf("\n");
return 0;
}