Pagini recente » Cod sursa (job #1412434) | Cod sursa (job #1889458) | Cod sursa (job #2107884) | Cod sursa (job #469983) | Cod sursa (job #161413)
Cod sursa(job #161413)
/*
ID: damamih1
PROB: cowjog
LANG: C++
*/
#include <stdio.h>
#include <vector>
#include <algorithm>
const int inf = 2000000000;
using namespace std;
int h[1024][128], n, m, k, temp[210];
vector<int> v[1024], cost[1024];
int bs(int);
int main()
{
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
int i, j, a, b, c, cnt, pos, l;
scanf("%d %d %d", &n, &m, &k);
for(i = 1; i <= m; ++i)
{
scanf("%d %d %d", &a, &b, &c);
v[a].push_back(b);
cost[a].push_back(c);
}
for(i = 1; i <= n; ++i)
{
for(j = 0; j <= k; ++j)
{
h[i][j] = inf;
}
}
h[n][1] = 0;
for(i = n; i > 1; --i)
{
int sz = v[i].size();
for(j = 0; j < sz; ++j)
{
cnt = 1;
for(l = 1; l <= k; ++l)
{
temp[l] = h[v[i][j]][l];
}
temp[0] = k;
pos = bs(h[i][cnt] + cost[i][j]);
while(pos <= k && cnt <= k)
{
temp[++temp[0]] = h[i][cnt] + cost[i][j];
++cnt;
pos = bs(h[i][cnt] + cost[i][j]);
}
sort(temp + 1, temp + temp[0] + 1);
for(l = 1; l <= k; ++l)
{
h[v[i][j]][l] = temp[l];
}
}
}
for(i = 1; i <= k; ++i)
{
if(h[1][i] != inf)
{
printf("%d ", h[1][i]);
}
else
{
printf("-1\n");
}
}
printf("\n");
return 0;
}
int bs(int val)
{
int min = 1, mid, max = k, ret = k + 1;
while(min <= max)
{
mid = (min + max) / 2;
if(temp[mid] > val)
{
max = mid - 1;
ret = mid;
}
else
{
min = mid + 1;
}
}
return ret;
}