Pagini recente » Cod sursa (job #576124) | Cod sursa (job #1481190) | Cod sursa (job #824899) | Cod sursa (job #1887303) | Cod sursa (job #1832619)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
const int dim=(1<<10);
struct pq_member
{
int loc,dist;
}el;
struct comp
{
bool operator()(pq_member unu,pq_member doi)
{
return unu.dist>doi.dist;
}
};
vector<int> v[dim],rev[dim];
priority_queue < pq_member,vector<pq_member>,comp> pq;
int d[dim][dim],cost[dim][dim];
int sortop[dim],ind[dim];
bool viz[dim];
int n,m,k,a,b,c,i,cnt,j,node,prec,ki;
void dfs(int x)
{
viz[x]=1;
for(int i=0;i<v[x].size();i++)
if(!viz[v[x][i]])
dfs(v[x][i]);
ki++;sortop[ki]=x;
}
int main()
{
ifstream f("pitici.in");
ofstream g("pitici.out");
f>>n>>m>>k;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
v[a].push_back(b);
rev[b].push_back(a);
cost[a][b]=c;
}
dfs(1);
for(i=1;i<=n;i++)
for(j=1;j<=k+1;j++)
d[i][j]=(1<<30);
d[1][1]=0;
for(cnt=n;cnt>=1;cnt--)
{
node=sortop[cnt];
for(i=0;i<rev[node].size();i++)
{
prec=rev[node][i];
ind[prec]=1;
el.loc=prec;
el.dist=d[prec][ind[prec]]+cost[prec][node];
pq.push(el);
}
for(i=1;i<=k&&(!pq.empty());i++)
{
el=pq.top();pq.pop();
d[node][i]=el.dist;
ind[el.loc]++;
el.dist=d[el.loc][ind[el.loc]]+cost[el.loc][node];
pq.push(el);
}
while(!pq.empty()) pq.pop();
}
for(i=1;i<=k;i++)
g<<d[n][i]<<' ';
return 0;
}