Pagini recente » Cod sursa (job #2657287) | Cod sursa (job #40165) | Cod sursa (job #19600) | Cod sursa (job #1823284) | Cod sursa (job #631397)
Cod sursa(job #631397)
#include <fstream>
#include <cstring>
#include <iomanip>
#define NMAX 256
using namespace std;
ifstream in;
ofstream out;
double g[NMAX][NMAX];
int cost[NMAX][NMAX];
int grad[NMAX];
double t[NMAX];
int main()
{
int M,N,x,y;
memset(grad,0,sizeof(grad));
in.open("tunel.in");
in>>N>>M;
for(int i=1;i<=M;++i)
{
in>>x>>y;
in>>cost[x][y];
cost[y][x]=cost[x][y];
++grad[x];
++grad[y];
}
in.close();
memset(t,0,sizeof(t));
memset(g,0,sizeof(g));
for(int i=1;i<N;++i)
{
g[i][i]=1;
for(int j=1;j<=N;++j)
if(cost[i][j])
{
if(j!=N) g[i][j]-=1/double(grad[i]);
g[i][N]+=double(cost[i][j])/grad[i];
}
}
for(int i=1;i<N;++i)
{
if(g[i][i]!=1)
{
for(int j=i+1;j<=N;++j) g[i][j]/=g[i][i];
g[i][i]=1;
}
for(int r=i+1;r<N;++r)
if(g[r][i]!=0)
{
for(int j=i+1;j<=N;++j)
g[r][j]-=g[r][i]*g[i][j];
g[r][i]=0;
}
}
for(int i=N-1;i>0;--i)
{
t[i]=g[i][N];
for(int j=i+1;j<N;++j)
t[i]-=t[j]*g[i][j];
}
out.open("tunel.out");
out<<fixed<<setprecision(3)<<t[1]<<'\n';
out.close();
return 0;
}