Pagini recente » Cod sursa (job #1436611) | Cod sursa (job #1223797) | Cod sursa (job #1166739) | Cod sursa (job #860568) | Cod sursa (job #579971)
Cod sursa(job #579971)
#include <stdio.h>
#define Nmax 260
#define Mmax 100000
#define D double
int N,M;
D a[Nmax][Nmax],X[Nmax];
int grad[Nmax];
inline int swap_line(int i,int j){
int k; D aux;
for(k=1;k<=N+1;++j) aux=a[i][k], a[i][k]=a[j][k], a[j][k]=aux;
}
int main(){
int i,j,k,l,x,y,z; D sum;
freopen("tunel.in","r",stdin);
freopen("tunel.out","w",stdout);
scanf("%d%d",&N,&M);
for(i=1;i<=M;++i){
scanf("%d%d%d",&x,&y,&z);
grad[x]++; grad[y]++;
a[x][y]--; a[y][x]--;
a[x][N+1] +=z; a[y][N+1] +=z;
}
for(i=1;i<=N;++i)
a[i][i]=grad[i];
for(i=1;i<N;++i){
if( !a[i][i] ){
for(l=i+1;l<=N;++l)
if(a[l][i]) break;
if(l<=N) swap_line(i,l);
else continue;
}
for(l=i+1;l<=N;++l)
for(k=i+1;k<=N+1;++k)
a[l][k] -= a[l][i]*a[i][k]/a[i][i];
for(k=i+1;k<=N;++k) a[k][i]=0;
for(k=i;k<=N+1;++k)
a[i][k] /= a[i][i];
}
X[N]=0;
for(i=N-1;i>=1;--i){
sum=0;
for(j=i+1;j<=N;++j)
sum+=a[i][j]*X[j];
X[i]=a[i][N+1]-sum;
}
printf("%.4lf\n",X[1]);
fclose(stdin); fclose(stdout);
return 0;
}