Pagini recente » Cod sursa (job #2382690) | Cod sursa (job #616062) | Cod sursa (job #744800) | Cod sursa (job #2149597) | Cod sursa (job #2109043)
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
#define EPS 1e-8
using namespace std;
ifstream si("tunel.in");
ofstream so("tunel.out");
vector<pair<int,int> >v[300];
double x[300][300];
int main()
{
int n,m;
si>>n>>m;
for(int i=1;i<=m;++i)
{
int a,b,c;
si>>a>>b>>c;
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,c));
}
for(int i=1;i<n;i++)
{
x[i][i]=-1;
double s=0;
for(int j=0;j<v[i].size();j++){
int now=v[i][j].first;
int cost=v[i][j].second;
x[i][now]+=(1.0/v[i].size());
s+=(1.0*cost/v[i].size());
}
x[i][n]=-s;
}
for(int i=1;i<n;i++)
{
int l=i;
while(l<n&&x[l][i]<EPS&&x[l][i]>-EPS)
l++;
if(l==n)
continue;
for(int j=1;j<=n;j++)
{
x[i][0]=x[l][j];
x[l][j]=x[i][j];
x[i][j]=x[i][0];
}
for(l=1;l<n;l++)
{
if(l==i)
continue;
if(x[l][i]>EPS||x[l][i]<-EPS)
{
double aux=x[l][i]/x[i][i];
for(int j=i;j<=n;j++)
x[l][j]-=(x[i][j]*aux);
}
}
}
double ans=x[1][n]/x[1][1];
so<<setprecision(6)<<fixed<<ans;
return 0;
}