Pagini recente » Cod sursa (job #2431354) | Cod sursa (job #2705738) | Cod sursa (job #47128) | Cod sursa (job #813212) | Cod sursa (job #1952497)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <vector>
using namespace std;
const int nmax=257;
double a[nmax][nmax];
double rap,sz,len,ans;
double eps=0.000000001;
vector< pair<int,int> > v[nmax];
int p[nmax];
int n,i,j,ind,m,aa,b,c,x;
void gauss()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(fabs(a[i][j])>eps)
{
p[i]=j;
}
if(p[i]==0) continue;
for(j=1;j<=n;j++)
if(i!=j&&fabs(a[j][p[i]])>eps)
{
rap=a[j][p[i]]/a[i][p[i]];
for(ind=1;ind<=n+1;ind++)
{
a[j][ind]-=a[i][ind]*rap;
}
a[j][p[i]]=0;
}
}
for(i=1;i<=n;i++)
if(p[i]==1)
ans=a[i][n+1]/a[i][1];
}
int main()
{
ifstream f("tunel.in");
ofstream g("tunel.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>aa>>b>>c;
v[aa].push_back(make_pair(b,c));
v[b].push_back(make_pair(aa,c));
}
for(i=1;i<=n;i++)
{
sz=v[i].size();
for(j=0;j<v[i].size();j++)
{
x=v[i][j].first;len=v[i][j].second;
a[i][x]+=1/sz;
a[i][n+1]-=(1/sz)*len;
}
a[i][i]=-1;
}
for(i=1;i<=n;i++)
a[i][n]=0;
gauss();
g<<fixed<<setprecision(6)<<ans;
return 0;
}