Pagini recente » Cod sursa (job #1956546) | Cod sursa (job #1072069) | Cod sursa (job #1931668) | Cod sursa (job #2292316) | Cod sursa (job #283916)
Cod sursa(job #283916)
#include <cstdio>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
const int N_MAX = 1024;
int n,m,pitici;
vector< pair<int,int> > G[N_MAX];
multiset<int> S[N_MAX];
vector<int> vaux;
void df ( int k ) {
if (S[k].size()) return;
if (k == n-1) {
S[k].insert(0);
return;
}
for (vector< pair<int,int> >::iterator it = G[k].begin(); it != G[k].end(); ++it) {
df(it->first);
for (multiset<int>::iterator j = S[it->first].begin(); j != S[it->first].end(); ++j)
S[k].insert(*j + it->second);
}
if (S[k].size() > pitici) {
multiset<int>::iterator wh = S[k].begin();
for (int i = 0; i < pitici; ++i, ++wh);
S[k].erase(wh,S[k].end());
}
}
int main() {
freopen("pitici.in","rt",stdin);
freopen("pitici.out","wt",stdout);
scanf("%d %d %d",&n,&m,&pitici);
for (int i = 0, a,b,c; i < m; ++i) {
scanf("%d %d %d",&a,&b,&c);
--a; --b;
G[a].push_back(make_pair(b,c));
}
df(0);
multiset<int>::iterator it = S[0].begin();
for (int i = 0; i < pitici; ++i, ++it)
printf("%d ",*it);
printf("\n");
return 0;
}