Pagini recente » Cod sursa (job #387931) | Cod sursa (job #602297) | Cod sursa (job #424652) | Cod sursa (job #1446155) | Cod sursa (job #285019)
Cod sursa(job #285019)
#include <stdio.h>
#include <vector>
#include <set>
#include <queue>
#define pb push_back
#define mp make_pair
#define maxn 1039
#define maxm 200039
using namespace std;
long n, m, i, j, k, a, b, c, tata, nod, fiu, ccn, poz;
long f[maxn], coa[maxn], muc[maxn], it[maxn];
vector <long> v[maxn], inv[maxn];
long cost[maxn][maxn];
long d[maxn][maxn], dim[maxn];
priority_queue < pair<long, long> > heap;
void df(long nod)
{
long ff=0;
f[nod]=1;
for(long y=0; y<v[nod].size(); y++)
{
if(f[v[nod][y]]==0) df(v[nod][y]);
ff=1;
}
if(ff==0)
{
ccn++;
coa[ccn]=nod;
}
}
int main()
{
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
scanf("%d %d %d", &n, &m, &k);
f[1]=1;
for(i=1; i<=m; i++)
{
scanf("%d %d %d", &a, &b, &c);
v[a].pb(b);
muc[a]++;
inv[b].pb(a);
cost[b][a]=c;
cost[a][b]=c;
}
df(1);
for(i=1; i<=ccn; i++)
{
nod=coa[i];
for(j=0; j<inv[nod].size(); j++)
{
fiu=inv[nod][j];
muc[fiu]=muc[fiu]-1;
if(muc[fiu]==0)
{
ccn++;
coa[ccn]=fiu;
}
}
}
d[1][1]=0;
dim[1]=1;
for(i=ccn-1; i>0; i--)
{
nod=coa[i];
while(!heap.empty())
{
heap.pop();
}
for(j=0; j<inv[nod].size(); j++)
{
tata=inv[nod][j];
if(dim[tata]!=0)
{
heap.push(mp(-(d[tata][1]+cost[nod][tata]), tata));
it[tata]=1;
}
}
// printf("%d: ", nod);
for(j=1; j<=k && !heap.empty(); j++)
{
d[nod][j]=-(heap.top().first);
// printf("%d ", d[nod][j]);
tata=heap.top().second;
heap.pop();
it[tata]++;
if(it[tata]<=dim[tata]) heap.push(mp(-(d[tata][it[tata]]+cost[nod][tata]), tata));
dim[nod]++;
}
// printf("\n");
}
for(i=1; i<=k; i++)
{
printf("%d ", d[n][i]);
}
printf("\n");
return 0;
}