Pagini recente » Cod sursa (job #14297) | Cod sursa (job #2599598) | Cod sursa (job #891554) | Cod sursa (job #2521626) | Cod sursa (job #856001)
Cod sursa(job #856001)
#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;
set <pair <long, long> > ::iterator 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;
co[++sf]=1; 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();
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));
h.erase(h.begin());
}
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;
}