Pagini recente » Cod sursa (job #412689) | Cod sursa (job #2323011) | Cod sursa (job #341227) | Cod sursa (job #1913387) | Cod sursa (job #78164)
Cod sursa(job #78164)
using namespace std;
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 1024
#define pb push_back
vector<int> a[maxn], b[maxn];
int x[maxn][maxn];
int n, m, K;
int sorted[maxn], ns;
bool viz[maxn];
int d[maxn];
vector<int> di[maxn];
//int sol[maxn];
void read()
{
freopen("pitici.in","r",stdin);
scanf("%d %d %d\n", &n, &m, &K);
int p, q, c;
while(m--)
{
scanf("%d %d %d\n", &p, &q, &c);
a[p].pb(q);
b[q].pb(p);
x[p][q]=c;
}
}
void dfs(int nd)
{
viz[nd]=1;
vector<int>::iterator i;
for(i=a[nd].begin();i!=a[nd].end();++i)
if(x[nd][*i] && !viz[*i])
dfs(*i);
sorted[++ns]=nd;
}
void dist()
{
int i,t;
vector<int>::iterator j,k;
memset(d, 0x3f3f3f3f, sizeof(d));
d[1]=0;
i=sorted[1];
for(j=a[i].begin();j!=a[i].end();++j)
{
di[*j].pb(d[i]+x[i][*j]);
if(d[i]+x[i][*j]<d[*j])
d[*j]=d[i]+x[i][*j];
}
for(t=2;t<=n;++t)
{
i=sorted[t];
for(j=a[i].begin();j!=a[i].end();++j)
{
for(k=di[i].begin();k!=di[i].end();++k)
di[*j].pb(*k+x[i][*j]);
//di[*j].pb(d[i]+x[i][*j]);
if(d[i]+x[i][*j]<d[*j])
d[*j]=d[i]+x[i][*j];
}
}
sort(di[n].begin(),di[n].end());
for(i=0;i<K;++i) printf("%d ", di[n][i]);
printf("\n");
}
int main()
{
freopen("pitici.out","w",stdout);
read();
dfs(1);
reverse(sorted+1, sorted+n+1);
//for(int i=1;i<=n;++i) printf("%d ", sorted[i]);
//printf("\n");
dist();
//for(int i=1;i<=n;++i) printf("%d ", d[i]);
//printf("\n");
//printf("\n\n");
int i, j;
// for(i=1;i<=n;++i)
//{
//printf("%d ::", i);
// for(j=0;j<di[i].size();++j)printf("%d ", di[i][j]);
// printf("\n");
// }
return 0;
}