Pagini recente » Cod sursa (job #2865399) | Cod sursa (job #149210) | Cod sursa (job #1157681) | Cod sursa (job #1582308) | Cod sursa (job #116208)
Cod sursa(job #116208)
#include<stdio.h>
#include<string.h>
#define Nm 256
int M[Nm][Nm],D[Nm],S[Nm],n;
double A[Nm][Nm+1];
void read()
{
int m,x,y,c;
freopen("tunel.in","r",stdin);
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&x,&y,&c);
x=n-x+1; y=n-y+1;
++D[x]; ++D[y];
S[x]+=c; S[y]+=c;
++M[x][y]; ++M[y][x];
}
}
void add_line(int a, int b, double x)
{
int j;
for(j=1;j<=n+1;++j)
A[a][j]+=A[b][j]*x;
}
void solve()
{
int i,j;
double Aux[Nm+1];
A[1][1]=1;
for(i=2;i<=n;++i)
{
for(j=1;j<=n;++j)
A[i][j]=M[i][j]/(double)D[i];
A[i][i]=-1;
A[i][n+1]=-S[i]/(double)D[i];
}
for(j=1;j<n;++j)
{
for(i=j;i<=n && !A[i][j];++i);
memcpy(Aux,A[i],sizeof(A[i]));
memcpy(A[i],A[j],sizeof(A[i]));
memcpy(A[j],Aux,sizeof(A[i]));
for(i=j+1;i<=n;++i)
add_line(i,j,-A[i][j]/A[j][j]);
}
}
void write()
{
freopen("tunel.out","w",stdout);
printf("%lf\n",A[n][n+1]/A[n][n]);
}
int main()
{
read();
solve();
write();
return 0;
}