Pagini recente » Cod sursa (job #303354) | Cod sursa (job #2279526) | Cod sursa (job #1660971) | Cod sursa (job #572400) | Cod sursa (job #1023307)
#include <fstream>
#include <vector>
#include <utility>
#include <iomanip>
#include <cmath>
#define maxn 101
#define inf 1<<30
#define eps 1e-9
#define vintp vector<pair<int,double> >::iterator
using namespace std;
ifstream fin("flux.in");
ofstream fout("flux.out");
double a[maxn][maxn],val[maxn],b[maxn],ans=inf;
vector <pair<int,double> > G[maxn];
int n,m,x,y;
double c;
bool viz[maxn];
void swaplines (int i, int j)
{
for (int k=1; k<=n; ++k)
{
swap(a[i][k],a[j][k]);
}
}
double min (double a, double b)
{
if (a<b) return a;
return b;
}
void dfs (int x)
{
viz[x] = 1;
for (vintp it = G[x].begin(); it != G[x].end(); ++it)
{
if (fabs(val[it->first]-val[x]) > eps)
ans = min (fabs(it->second/(val[it->first]-val[x])),ans);
if (!viz[x]) dfs (it->first);
}
}
int main()
{
fin>>n>>m;
for (int i=1; i<=m; ++i)
{
fin>>x>>y>>c;
a[x][y]--;
a[x][x]++;
a[y][x]--;
a[y][y]++;
G[x].push_back (make_pair(y,c));
G[y].push_back (make_pair(x,c));
}
b[1] = -1;
b[n] = 1;
for (int i=1; i<=n; ++i)
{
int j=i,ok=0;
for (int k=i; k<=n; ++k)
{
if (a[k][j])
{
ok=1;
swaplines (k,i);
break;
}
}
if (!ok) continue;
for (int jj=j+1; jj<=n; ++jj)
{
a[i][jj] /= a[i][j];
}
b[i] /= a[i][j];
a[i][j] = 1;
for (int ii=i+1; ii<=n; ++ii)
{
for (int jj=j+1; jj<=n; ++jj)
{
a[ii][jj] -= (a[i][jj]*a[ii][j]);
}
b[ii] -= (b[i]*a[ii][j]);
a[ii][j] = 0;
}
}
for (int i=n; i>=1; --i)
{
int j = i;
if (b[i] && a[i][j])
{
val[j] = b[i];
for (int k=i-1; k>=1; --k)
{
b[k] -= a[k][j]*b[i];
}
}
}
dfs (1);
fout<<fixed<<setprecision(3)<<ans;
}