Pagini recente » Cod sursa (job #2325464) | Cod sursa (job #1709054) | Cod sursa (job #1265992) | Cod sursa (job #2944656) | Cod sursa (job #2030997)
#include<fstream>
#include<iomanip>
#include<vector>
#include<utility>
#include<cmath>
#define N 100
#define MULT 100000000.0
#define EPS 10e-10
using namespace std;
int c[N+1][N+1];
double ecu[N+1][N+1];
double dist[N+1];
ifstream fin("flux.in");
ofstream fout("flux.out");
int gauss(int n){
int i,j,l;
int ans=0;
for(i=2,j=2;i<=n;i++){
for(l=j;l<n;l++)
if (ecu[l][i]>EPS ||ecu[l][i]<-EPS) break;
if (l==n){
ans=l;
continue ;
}
for(int o=2;o<=n;o++){
double aux=ecu[j][o];
ecu[j][o]=ecu[l][o];
ecu[l][o]=aux;
}
for(l=2;l<n;l++)
if (l!=j &&(ecu[l][i]>EPS ||ecu[l][i]<-EPS)){
double aux=-ecu[l][i]/ecu[j][i];
for(int o=2;o<=n;o++)
ecu[l][o]=ecu[l][o]+aux*ecu[j][o];
}
j++;
}
return ans;
}
int main(){
int n,m,i,j;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
c[i][j]=MULT;
for(i=1;i<=m;i++){
int a,b,x;
fin>>a>>b>>x;
c[a][b]=min(c[a][b],x);
c[b][a]=min(c[b][a],x);
ecu[a][b]++;
ecu[a][a]--;
ecu[b][a]++;
ecu[b][b]--;
}
for(i=2;i<n;i++)
ecu[i][1]=0;
int ned=gauss(n);
dist[ned]=1;
for(i=2;i<=n;i++){
if (i==ned) continue;
for(j=2;j<=n;j++)
if (j!=ned &&(ecu[i][j]>EPS ||ecu[i][j]<-EPS)) break;
if (j<=n) dist[j]=-(ecu[i][ned]/ecu[i][j]);
}
double resc=MULT;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
double aux=abs(dist[i]-dist[j]);
if (aux>EPS) resc=min(resc,c[i][j]/aux);
}
for(i=1;i<=n;i++)
dist[i]*=resc;
double ans=0;
for(j=1;j<=n;j++)
ans+=(dist[j]*ecu[n][j]);
ans=abs(ans);
fout<<setprecision(6)<<fixed<<ans;
return 0;
}