Pagini recente » Cod sursa (job #3252136) | Cod sursa (job #3235361) | Cod sursa (job #3180378) | Cod sursa (job #2609384) | Cod sursa (job #856062)
Cod sursa(job #856062)
#include<stdio.h>
#include<vector>
#include<set>
using namespace std;
#define nmax 1025
struct element{long n, c;};
long n, m, i, a, b, c, inc, sf, el, k;
long gr[nmax], co[nmax], poz[nmax], cost[nmax], sol[nmax][nmax];
vector <element> ma[nmax], an[nmax];
vector <element> ::iterator it;
set <pair <long, long> > h;
pair <long, long> pr;
element mch, x;
void citire()
{
scanf("%ld %ld %ld",&n,&m,&k);
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&a,&b,&c);
mch.n=b; mch.c=c; ma[a].push_back(mch);
mch.n=a; mch.c=c; an[b].push_back(mch);
gr[b]++;
}
}
void rezolvare()
{
sol[1][0]=1;
for (i=1;i<=n;i++)
if (gr[i]==0)
co[++sf]=i;
inc=1;
while (inc<=sf)
{
el=co[inc]; inc++;
h.clear();
for (it=an[el].begin();it!=an[el].end();it++)
{
h.insert(make_pair(sol[(*it).n][1]+(*it).c,(*it).n));
poz[(*it).n]=1;
cost[(*it).n]=(*it).c;
}
for (i=1;((i<=k)&&(h.size()));i++)
{
pr=*h.begin(); h.erase(h.begin());
sol[el][++sol[el][0]]=pr.first;
poz[pr.second]++;
if (poz[pr.second]<=sol[pr.second][0])
h.insert(make_pair(sol[pr.second][poz[pr.second]]+ cost[pr.second], pr.second));
}
for (it=ma[el].begin();it!=ma[el].end();it++)
{
x=*it;
gr[x.n]--;
if (!gr[x.n])
co[++sf]=x.n;
}
}
}
void afisare()
{
for (i=1;i<=k;i++)
printf("%ld ",sol[n][i]);
}
int main()
{
freopen("pitici.in","r",stdin);
freopen("pitici.out","w",stdout);
citire();
rezolvare();
afisare();
return 0;
}