Pagini recente » Cod sursa (job #240886) | Cod sursa (job #1413332) | Cod sursa (job #972163) | Cod sursa (job #3188272) | Cod sursa (job #2919688)
#include <bits/stdc++.h>
using namespace std;
ifstream f("tunel.in");
ofstream g("tunel.out");
const double limit = 1e-6;
int n,m;
double a[265][265];
double rez[265];
int poz[265];
void Add_edge(int x, int y, int c)
{
++a[y][y];
--a[y][x];
a[y][n+1] += c;
}
void solve_gauss()
{
for(int i=1;i<=n+1;i++)
{
a[n][i] = 0;
a[i][n] = 0;
}
for(int i=1;i<n;i++)
{
poz[i] = 0;
for(int j=1;j<=n;j++)
{
if(abs(a[i][j]) > limit)
{
poz[i] = j;
break;
}
}
for(int l=1;l<n;l++)
{
if(i==l)
{
continue;
}
if(abs(a[l][poz[i]]) < limit)
{
continue;
}
double fact = 1.0 * a[l][poz[i]] / a[i][poz[i]];
for(int j=1;j<=n+1;j++)
{
a[l][j] -= fact * a[i][j];
}
}
}
for(int i=1;i<n;i++)
{
rez[poz[i]] = 1.0 * a[i][n + 1] / a[i][poz[i]];
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c;
f>>x>>y>>c;
Add_edge(x,y,c);
Add_edge(y,x,c);
}
solve_gauss();
g<<fixed<<setprecision(6);
g<<rez[1]<<'\n';
return 0;
}