Pagini recente » Cod sursa (job #2534386) | Cod sursa (job #860881) | Cod sursa (job #2771524) | Cod sursa (job #1518131) | Cod sursa (job #2106177)
#include<bits/stdc++.h>
#define inf 1000000000
#define maxN 1035
using namespace std;
typedef struct tip
{
int x,y,z;
bool operator<(const tip& other) const
{
return x>other.x;
}
};
bool seen[maxN];
int k,n;
int st[maxN];
vector<pair<int,int> > v[maxN];
int dp[1035][1035];
inline void dfs(int nod)
{
for(int i=1;i<=k;i++)
dp[nod][i]=inf;
seen[nod]=1;
if(nod==n)
{
dp[nod][1]=0;
return;
}
priority_queue<tip> q;
while(!q.empty()) q.pop();
bool leaf=1;
for(vector<pair<int,int> >::iterator it=v[nod].begin();it!=v[nod].end();it++)
{
// if(!seen[it->first])
{
leaf=0;
dfs(it->first);
st[it->first]=1;
q.push({dp[it->first][1]+it->second,it->first,it->second});
}
}
for(int i=1;i<=k;i++)
{
if(q.empty()) break;
int val=q.top().x;
int nw=q.top().y;
int edg=q.top().z;
q.pop();
dp[nod][i]=val;
st[nw]++;
q.push({dp[nw][st[nw]]+edg,nw,edg});
}
}
int m,x,y,z;
int main()
{
freopen("pitici.in","r",stdin);
freopen("pitici.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
v[x].push_back({y,z});
//v[y].push_back({x,z});
}
dfs(1);
for(int i=1;i<=k;i++)
printf("%d ",dp[1][i]);
return 0;
}