Pagini recente » Cod sursa (job #3225698) | Cod sursa (job #2325970) | Cod sursa (job #2344253) | Cod sursa (job #2590809) | Cod sursa (job #113923)
Cod sursa(job #113923)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 256
#define pb push_back
#define sz size()
long int n,m,x,y,i,j,k,cost[NMAX][NMAX],c;
double a[NMAX][NMAX],liber[NMAX],ct;
vector<int> G[NMAX];
void GAUSS()
{
for (i=1;i<n;i++)
for (j=1;j<n;j++)
{
if (i==j) continue;
if (a[j][i]==0) continue;
ct=a[i][i]/a[j][i];
for (k=1;k<n;k++)
a[j][k]=a[j][k]*ct - a[i][k];
liber[j]=liber[j]*ct - liber[i];
}
}
int main()
{
freopen("tunel.in","r",stdin);
freopen("tunel.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&x,&y,&c);
G[x].pb(y);
G[y].pb(x);
cost[x][y]=c;
cost[y][x]=c;
}
for (i=1;i<=n-1;i++)
{
k=G[i].sz;
a[i][i]=-1;
for (j=0;j<k;j++)
{
if (G[i][j]==n) {liber[i]+=(double) (cost[i][ G[i][j] ])/k;continue;}
a[i][ G[i][j] ]+=(double) 1/k;
liber[i]+=(double) (cost[i][ G[i][j]])/k;
}
}
/* for (i=1;i<n;i++, printf("\n") )
for (j=1;j<n;j++)
printf("%.2lf ",a[i][j]);*/
for (i=1;i<n;i++)
liber[i]=-liber[i];
GAUSS();
printf("%.2lf",liber[1]/a[1][1]);
return 0;
}