Pagini recente » Cod sursa (job #1533531) | Cod sursa (job #2258184) | Cod sursa (job #2129337) | Cod sursa (job #698220) | Cod sursa (job #161933)
Cod sursa(job #161933)
#include <stdio.h>
#include <vector>
#include <set>
#define nmax 1024
#define pb push_back
using namespace std;
typedef pair<int, int> ii;
int l, n, m, k, n1, n2, cs, vec, cost;
char v[nmax];
vector <int> ord;
vector <ii> e[nmax];
multiset <int> s[nmax];
multiset <int> :: iterator it;
void dfs(int x)
{
v[x] = 1;
for(int i = 0; i < (int)e[x].size(); i++)
if(!v[e[x][i].first]) dfs(e[x][i].first);
ord.pb(x);
}
int main()
{
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d", &n1, &n2, &cs);
e[n1].pb(ii(n2, cs));
}
dfs(1);
s[1].insert(0);
for(int i = ord.size() - 1; i >= 0; i--)
for(int j = 0; j < (int)e[ord[i]].size(); j++)
{
vec = e[ord[i]][j].first, cost = e[ord[i]][j].second;
for(it = s[ord[i]].begin(), l = 1; it != s[ord[i]].end() && l <= k; ++it, ++l)
s[vec].insert(*it + cost);
}
for(it = s[n].begin(), l = 1; it != s[n].end() && l <= k; ++it, ++l) printf("%d ", *it); printf("\n");
return 0;
}