Pagini recente » Cod sursa (job #1771598) | Cod sursa (job #836351) | Cod sursa (job #1209643) | Cod sursa (job #2935129) | Cod sursa (job #2126321)
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
const int nmax=105;
const long double eps=0.000000001;
long double a[nmax][nmax],mn[nmax][nmax];
int n[nmax][nmax];
int p[nmax];
long double ans[nmax];
int N,m,i,j,k,x,y;
long double answer,rap,cap;
void solve()
{
for(i=1;i<=N+2;i++)
{
while(p[i]<=N+1&&fabs(a[i][p[i]])<eps)
p[i]++;
if(p[i]==N+1) {answer=0;return;}
if(p[i]==N+2) 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(k=1;k<=N+1;k++)
a[j][k]-=a[i][k]*rap;
}
}
for(i=1;i<=N+2;i++)
ans[p[i]]=a[i][N+1]/a[i][p[i]];
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
if(n[i][j]&&ans[i]<ans[j])
answer=min(answer,mn[i][j]/(ans[j]-ans[i]));
}
int main()
{
ifstream f("flux.in");
ofstream g("flux.out");
f>>N>>m;answer=(1<<30);
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
mn[i][j]=10001;
for(i=1;i<=m;i++)
{
f>>x>>y>>cap;
n[x][y]++;n[y][x]++;
mn[x][y]=min(mn[x][y],cap);mn[y][x]=min(mn[y][x],cap);
}
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
a[i][i]+=n[i][j];
a[i][j]-=n[i][j];
}
}
a[1][N+1]=-1;
a[N][N+1]=1;
// a[N+1][1]=1;a[N+1][N+1]=0;
solve();
g<<fixed<<setprecision(6)<<answer;
return 0;
}