Pagini recente » Cod sursa (job #2309016) | Cod sursa (job #2104561) | Cod sursa (job #2605933) | Cod sursa (job #198524) | Cod sursa (job #1232817)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin ("flux.in");
ofstream fout ("flux.out");
double a[110][110],x[110],sol,aux;
int c[110][110],d[110][110];
bool f[110],ok;
int n,m,X,Y,C,k,l,i,j;
double modul (double x) {
return (x>0?x:-x);
}
void dfs (int nod) {
f[nod]=1;
for (int i=1;i<=n&&!ok;i++)
if (d[nod][i]!=0 && f[i]==0) {
if (i==n) {
ok=1;
return;
}dfs(i);
}
}
int main () {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>X>>Y>>C;
if (d[X][Y]!=0)
c[X][Y]=c[Y][X]=min(C,c[X][Y]);
else
c[X][Y]=c[Y][X]=C;
d[X][Y]++;
d[Y][X]++;
sol+=C;
}
for (i=2;i<=n;i++)
for (j=1;j<=n;j++) {
a[i][j]-=d[i][j];
a[i][i]+=d[i][j];
}
a[n][n+1]=1;
i=1;j=1;
while (i<=n && j<=n){
for (k=i;k<=n;k++)
if (modul(a[k][j])>=0.00000001)
break;
if (k==n+1) {
j++;
continue;
}
if (k!=i)
for (l=j;l<=n+1;l++){
aux=a[k][l];
a[k][l]=a[i][l];
a[i][l]=aux;
}
for (l=j+1;l<=n+1;l++)
a[i][l]/=a[i][j];
a[i][j]=1;
for (k=i+1;k<=n;k++){
for(l =j+1;l<=n+1;l++)
a[k][l]-=a[k][j]*a[i][l];
a[k][j]=0;
}
i++;j++;
}
for (i=n;i>=1;i--) {
for (j=1;j<=n+1;j++)
if (modul(a[i][j])>0.0000001)
break;
if (j>n+1)
continue;
x[j]=a[i][n+1];
for (k=j+1;k<=n;k++)
x[j]-=a[i][k]*x[k];
}
dfs(1);
if (!ok) {
fout<<"0\n";
return 0;
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (d[i][j]!=0) {
if (modul (x[j]-x[i])>0.0000001)
sol=min(sol,c[i][j]/modul (x[j]-x[i]));
}
fout<<setprecision (3)<<fixed;
fout<<sol<<"\n";
return 0;
}