Pagini recente » Cod sursa (job #1965159) | Cod sursa (job #1831403) | Cod sursa (job #840059) | Cod sursa (job #1959287) | Cod sursa (job #323771)
Cod sursa(job #323771)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
#define NMAX 102
#define pb push_back
#define sz size()
#define mp make_pair
#define ff first
#define ss second
vector< pair<int,int> > G[NMAX];
priority_queue< pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > hp;
int n,m,k,dimh;
int gr[NMAX];
int cnt[NMAX],cst[NMAX];
vector<int> D[NMAX];
int main()
{
freopen("pitici.in","r",stdin);
freopen("pitici.out","w",stdout);
int x,y,z,nod;
scanf("%d %d %d",&n,&m,&k);
for (int i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&z);
G[x].pb( mp(y,z) );
gr[y]++;
}
int cd[NMAX];
cd[0]=0;
for (int i=1;i<=n;i++)
if (gr[i]==0) cd[ ++cd[0] ] = i;
for (int i=1;i<=cd[0];i++)
{
nod=cd[i];
for (int j=0;j<(int)G[nod].sz;j++)
{
gr[ G[nod][j].ff ]--;
if (gr[ G[nod][j].ff ] == 0) cd[ ++cd[0] ] = G[nod][j].ff;
}
}
D[n].pb(0);
for (int i=n-1;i;i--)
{
nod=cd[i];
while (hp.sz) hp.pop();
for (int j=0;j<(int)G[nod].sz;j++)
{
if (D[ G[nod][j].ff ].sz) hp.push( mp(D[ G[nod][j].ff ][0]+G[nod][j].ss, G[nod][j].ff) );
cst[ G[nod][j].ff ] = G[nod][j].ss;
}
memset(cnt,0,sizeof(cnt));
for (int j=1;j<=k;j++)
{
if ( hp.sz==0 ) break;
D[nod].pb( hp.top().ff );
x=hp.top().ss;
hp.pop();
cnt[x]++;
if (cnt[x]<(int)D[x].sz) hp.push( mp( D[x][ cnt[x] ]+cst[x], x ) );
}
}
for (int i=0;i<min(k,(int)D[1].sz);i++)
printf("%d ",D[1][i]);
return 0;
}