Pagini recente » Cod sursa (job #2684826) | Cod sursa (job #1288598) | Cod sursa (job #2025269) | Cod sursa (job #385796) | Cod sursa (job #374381)
Cod sursa(job #374381)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define pb push_back
#define INF 999999999
#define PII pair<int, int>
typedef pair<int, int> hh;
vector < pair<int, int> > nr[1024];
priority_queue < PII , vector<PII>, greater <PII> > H;
int dist[1024][1024];
int poz[1024],calc[1024],cost[1024],k;
void df(int n){
if(calc[n])
return;
int pp=0,vec,i,sz=nr[n].size();
for(i=0;i<sz;++i)
df(nr[n][i].first);
while(!H.empty())
H.pop();
for(i=0;i<sz;++i){
vec=nr[n][i].first;
poz[vec]=1;
cost[vec]=nr[n][i].second;
H.push(hh(cost[vec]+dist[vec][1],vec));
}
for(i=0;i<k && !H.empty(); ++i){
PII rad=H.top();
H.pop();
if(rad.first>=INF)
break;
dist[n][++pp]=rad.first;
++poz[rad.second];
if(poz[rad.second]<=k){
vec=rad.second;
H.push( hh(dist[vec][poz[vec]]+cost[vec],vec) );
}
}
calc[n]=1;
}
int main(){
freopen("pitici.in","r",stdin);
freopen("pitici.out","w",stdout);
int n,m;
int a,b,c,i;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<m;++i){
scanf("%d%d%d",&a,&b,&c);
nr[a].pb(hh(b,c));
}
for(a=1;a<=n;++a){
for(b=1;b<=n;++b)
dist[a][b]=INF;
}
dist[n][1]=0;
df(1);
for(i=1;i<=k;++i)
printf("%d ",dist[1][i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}