Pagini recente » Cod sursa (job #2797866) | Cod sursa (job #1998904) | Cod sursa (job #264955) | Cod sursa (job #1490231) | Cod sursa (job #351853)
Cod sursa(job #351853)
using namespace std;
#include <vector>
#include <cstdio>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
vector< vector< pair<int,int> > > A;
double C[270][270];
int N,M;
void scan()
{
freopen("tunel.in","r",stdin);
freopen("tunel.out","w",stdout);
scanf("%d%d",&N,&M);
A.resize(N+1);
int x,y,c;
FOR(i,1,M)
{
scanf("%d%d%d",&x,&y,&c);
A[x].push_back( make_pair(y,c) );
A[y].push_back( make_pair(x,c) );
}
}
void Build_system()
{
FOR(i,1,N-1)
for(vector< pair<int,int> >::iterator it = A[i].begin();it != A[i].end();++it )
C[i][it->first] += (double)1 / (double)(A[i].size() ),
C[i][0] += (double)it->second / (double)(A[i].size() );
--N;
}
void Gauss()
{
FOR(i,2,N)
{
double rep = 1.0 / (1.0 - C[i][i]);
FOR(j,0,N) C[i][j] *= rep;
C[i][i] = 0;
FOR(j,1,N)
{
double rep = C[j][i];
FOR(k,0,N)
C[j][k] += C[i][k] * rep;
C[j][i] = 0;
}
}
printf("%lf\n",(1.0 / (1.0 - C[1][1]) ) * C[1][0]);
}
void solve()
{
Build_system();
Gauss();
}
int main()
{
scan();
solve();
return 0;
}