Pagini recente » Cod sursa (job #452920) | Cod sursa (job #2080928) | Autentificare | Cod sursa (job #731948) | Cod sursa (job #113943)
Cod sursa(job #113943)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 256
#define pb push_back
#define sz size()
#define mp make_pair
long int n,m,x,y,i,j,k,c;
double a[NMAX][NMAX],liber[NMAX],ct;
vector< pair<int,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];
x=i;if (x>j) x=j;
for (k=x;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( mp(y,c) );
G[y].pb( mp(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].first==n) {liber[i]+=(double) G[i][j].second/k;continue;}
a[i][ G[i][j].first ]+=(double) 1/k;
liber[i]+=(double) G[i][j].second/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("%.3lf",liber[1]/a[1][1]);
return 0;
}