Pagini recente » Cod sursa (job #396631) | Cod sursa (job #1180907) | Cod sursa (job #49848) | Cod sursa (job #769291) | Cod sursa (job #3328808)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1028;
vector<pair<int, int>> adj[NMAX];
vector<pair<int, int>> trans_adj[NMAX];
int grad[NMAX];
queue<int> q;
int f[NMAX];
int main() {
///WIP
ifstream cin("pitici.in");
ofstream cout("pitici.out");
int n, m, k, a, b, val;
cin>>n>>m>>k;
vector<int> v[n+1];
for(int i=0; i<m; i++) {
cin>>a>>b>>val;
adj[a].push_back({b, val});
trans_adj[b].push_back({a, 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();
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];
priority_queue<pair<int, int>> temp;
for(auto x : trans_adj[curr])
temp.push({trans_adj[curr].first + trans_adj[curr].second, trans_adj[curr].first}); /// DE VERIFICAT
for(auto x : trans_adj[curr]) {
int new_value = old_value + x.second;
int minn = temp.top();
temp.pop();
f[minn.second]++;
temp.push() /// al f[minn.second] element
}
}
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;
}