Pagini recente » Cod sursa (job #1935844) | Cod sursa (job #466769) | Cod sursa (job #1306218) | Cod sursa (job #1430169) | Cod sursa (job #1736643)
#include<cstdio>
#include<cmath>
#include<algorithm>
#define MAXN 260
#define MAXM 100010
#define EPS 1e-8
using namespace std;
int n,m,a[MAXM],b[MAXM],c[MAXM];
int degree[MAXN];
double equation[MAXN][MAXN],value[MAXN],answer[MAXN];
void Gauss(){
int i,j,k,p,q;
double temp;
for(i=1;i<=n;i++)
equation[i][i]=-1.0;
for(i=1;i<=m;i++){
equation[a[i]][b[i]]+=(double)1.0/degree[a[i]];
equation[b[i]][a[i]]+=(double)1.0/degree[b[i]];
value[a[i]]-=1.0*c[i]/degree[a[i]];
value[b[i]]-=1.0*c[i]/degree[b[i]];
}
n--;
i=j=1;
while(i<=n&&j<=n){
k=i;
while(k<=n&&fabs(equation[k][j])<EPS)
k++;
if(k==n+1){
j++;
continue;
}
for(p=1;p<=n;p++)
swap(equation[i][p],equation[k][p]);
swap(value[i],value[k]);
for(p=j+1;p<=n;p++)
equation[i][p]/=equation[i][j];
value[i]/=equation[i][j];
equation[i][j]=1.0;
for(k=i+1;k<=n;k++){
temp=equation[k][j];
for(p=1;p<=n;p++)
equation[k][p]-=temp*equation[i][p];
value[k]-=temp*value[i];
equation[k][j]=0;
}
i++;
j++;
}
for(i=n;i>=1;i--){
j=1;
while(j<=n+1&&fabs(equation[i][j])<EPS)
j++;
answer[j]=value[i];
for(k=j+1;k<=n;k++)
answer[j]-=equation[i][k]*answer[k];
}
printf("%.7f",answer[1]);
}
int main(){
freopen("tunel.in","r",stdin);
freopen("tunel.out","w",stdout);
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
degree[a[i]]++;
degree[b[i]]++;
}
Gauss();
return 0;
}