Pagini recente » Cod sursa (job #564650) | Cod sursa (job #417555) | Cod sursa (job #26382) | Cod sursa (job #44191) | Cod sursa (job #1250201)
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const double eps=0.000000001;
double v[300][300],sol[300];
vector<int> g[300];
int main()
{
freopen("tunel.in", "r", stdin);
freopen("tunel.out", "w", stdout);
int n,m,x,y,s;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&s);
g[x].push_back(y);
g[y].push_back(x);
v[x][n+1]+=s;v[y][n+1]+=s;
}
for(int i=1;i<n;i++)
{
x=g[i].size();
v[i][i]=1;
v[i][n+1]/=(double)x;
for(vector<int>::iterator it=g[i].begin();it!=g[i].end();it++) v[i][*it]=(double)-1/x;
}
int i=1,j=1,q;
while(i<n && j<=n)
{
for(q=i;q<n;q++) if(abs(v[q][j])>eps) break;
if(q==n) {j++;continue;}
if(i<q) for(int k=1;k<=n+1;k++) swap(v[i][k],v[q][k]);
for(q=j+1;q<=n+1;q++) v[i][q]/=v[i][j];
v[i][j]=1;
for(q=i+1;q<n;q++)
{
for(int k=j+1;k<=n+1;k++) v[q][k]-=v[i][k]*v[q][j];
v[q][j]=0;
}
i++;j++;
}
for(i=n-1;i;i--)
for(j=i;j<=n+1;j++)
if(v[i][j]==1)
{
sol[j]=v[i][n+1];
for(q=j+1;q<=n;q++) sol[j]-=v[i][q]*sol[q];
break;
}
printf("%lf",sol[1]);
return 0;
}