Pagini recente » Cod sursa (job #2326351) | Cod sursa (job #2248086) | Cod sursa (job #1317453) | Cod sursa (job #1429719) | Cod sursa (job #134699)
Cod sursa(job #134699)
#include <stdio.h>
#include <string.h>
struct dd { int x; double y; int z; } Q[2][200000];
struct point { int v,c; point *l; } *G[226];
int N[226];
double s;
void edge ( int x , int y , int c)
{
point *p = new point;
p->v=y;
p->c=c;
p->l=G[x];
G[x]=p;
}
int main ()
{
int i,j,x,y,c,n,m, q[] = {0,0};
point *p;
freopen ( "tunel.in" , "r" , stdin );
scanf ( "%d %d" , &n , &m );
for ( i=0 ; i<n ; i++ ) {
scanf ( "%d %d %d" , &x , &y , &c );
edge ( x , y ,c ); N[x]++; N[y]++;
edge ( y , x , c );
}
fclose ( stdin );
m=15/m;
Q[0][0].x=1; Q[0][0].y=1; Q[0][0].z=0; q[0]=1;
for ( i=0 ; i<=m ; i++ ) {
for ( j=0 ; j<q[i&1] ; j++ ) {
for ( p=G[ Q[i&1][j].x ]; p ; p=p->l ) {
Q[!(i&1)][q[!(i&1)]].x = p->v;
Q[!(i&1)][q[!(i&1)]].y = Q[i&1][j].y / N[Q[i&1][j].x];
Q[!(i&1)][q[!(i&1)]].z = Q[i&1][j].z + p->c;
if (p->v==n) s+=Q[!(i&1)][q[!(i&1)]].y*Q[!(i&1)][q[!(i&1)]].z;
else q[!i]++;
}
memset ( &Q[i&1][j] , 0 , sizeof ( dd ) );
}
q[i&1]=0;
}
freopen ( "tunel.in" , "w" , stdout );
printf ( "%.4lf\n" , s );
fclose ( stdout );
return 0;
}