Pagini recente » Borderou de evaluare (job #2970318) | Borderou de evaluare (job #1866068) | Borderou de evaluare (job #2145738) | Borderou de evaluare (job #1261456) | Cod sursa (job #3328792)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1028;
vector<pair<int, int>> adj[NMAX];
int grad[NMAX];
queue<int> q;
queue<int> top;
vector<int> v[NMAX];
int main() {
ifstream cin("pitici.in");
ofstream cout("pitici.out");
int n, m, k, a, b, val;
cin>>n>>m>>k;
for(int i=0; i<m; i++) {
cin>>a>>b>>val;
adj[a].push_back({b, val});
grad[b] ++;
}
for(int i=1; i<=n; i++)
if(grad[i] == 0)
q.push(i);
v[1].push_back(0);
while(q.empty() == false) {
int curr = q.front(); top.push(curr);
q.pop();
sort(v[curr].begin(), v[curr].end());
for(int i = 0; i < min(k, (int)v[curr].size()); i ++){
int old_value = v[curr][i];
//cout<<"!"<<i<<" "<<curr<<" "<<old_value<<'\n';
for(auto x : adj[curr]) {
//cout<<"!!"<<x.first<<" "<<x.second<<'\n';
int new_value = old_value + x.second;
v[x.first].push_back(new_value);
}
}
for(auto x : adj[curr]) {
grad[x.first]--;
if(grad[x.first] == 0)
q.push(x.first);
}
}
sort(v[n].begin(), v[n].end());
for(int i=0; i<k; i++)
cout<<v[n][i]<<" ";
return 0;
}