Pagini recente » Cod sursa (job #1108815) | Cod sursa (job #2376519) | Cod sursa (job #684561) | Cod sursa (job #2184287) | Cod sursa (job #1403150)
#include<cstdio>
#define eps 0.00000001
#define INF 2000000000
int n,m,i,j,a,b,ab,k,l,aux,v[200],d[110][110];
double ss,c[110][110],x[110][110],y[110][110],s[200];
FILE *f,*g;
void dfs(int nod){
v[nod]=1;
for(int i=1;i<=n;i++){
if(!v[i]&&d[nod][i]){
y[nod][i]=s[i]-s[nod];
y[i][nod]=-y[nod][i];
dfs(i);
}
else{
if(d[nod][i]){
y[nod][i]=s[i]-s[nod];
y[i][nod]=-y[nod][i];
}
}
}
}
int main(){
f=fopen("flux.in","r");
g=fopen("flux.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
c[i][j]=INF;
}
}
for(i=1;i<=n;i++){
fscanf(f,"%d%d%d",&a,&b,&ab);
if(c[a][b]>ab)
c[a][b]=ab;
c[b][a]=c[a][b];
d[a][b]++;
d[b][a]++;
}
for(i=2;i<=n;i++){
for(j=1;j<=n;j++){
if(i!=j){
x[i][j]=d[i][j];
x[i][i]-=d[i][j];
}
}
}
x[n][n+1]=1;
i=j=2;
while(i<=n){
for(k=i;k<=n;k++){
if(x[k][j]>eps||x[k][j]<-eps)
break;
}
if(k==n+1){
j++;
continue;
}
if(k!=i){
for(l=j;l<=n+1;l++){
aux=x[i][l];
x[i][l]=x[k][l];
x[k][l]=aux;
}
}
for(l=j+1;l<=n+1;l++){
x[i][l]/=x[i][j];
}
x[i][j]=1;
for(k=i+1;k<=n;k++){
for(l=j+1;l<=n+1;l++){
x[k][l]-=(x[i][l]*x[k][j]);
}
x[k][j]=0;
}
i++;
j++;
}
for(i=n;i>=2;i--){
for(j=2;j<=n+1;j++){
if(x[i][j]>eps||x[i][j]<-eps)
break;
}
s[j]=x[i][n+1];
for(l=j+1;l<=n;l++){
s[j]-=x[i][l]*s[l];
}
}
dfs(1);
if(!v[n]){
fprintf(g,"0.0000");
return 0;
}
ss=INF;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if( d[i][j] && y[i][j]>0 )
if(ss>c[i][j]/y[i][j])
ss=c[i][j]/y[i][j];
}
}
fprintf(g,"%.3lf",ss);
fclose(f);
fclose(g);
return 0;
}