Pagini recente » Cod sursa (job #707715) | Cod sursa (job #702477) | Cod sursa (job #2764718) | Cod sursa (job #903503) | Cod sursa (job #804644)
Cod sursa(job #804644)
#include<cstdio>
#include<algorithm>
#include<vector>
using std::vector;
using std::swap;
struct str
{
int x,c;
str()
{
x=c=0;
}
str (int xx,int cc)
{
x=xx;
c=cc;
}
};
vector<str> v[260];
double g[230][230];
double r[230];
int n;
double gauss()
{
for(int i=0,j=0;i<n&&j<n;i++,j++){
if(!g[i][j])
for(int x=i+1;x<n;x++)
if(g[x][j]){
for(int col=0;col<=n;col++)
swap (g[i][col],g[x][col]);
break;
}
double x=g[i][j];
for(int col=0;col<=n;col++)
g[i][col]/=x;
for(int u=i+1;u<n;u++){
double x=g[u][j];
for(int col=0;col<=n;col++)
g[u][col]-=g[i][col]*x;
}
}
for(int i=n-1;i>=0;i--){
int p;
for(p=0;g[i][p]<1e-6 && g[i][p]>-1e-6;p++);
r[p]=g[i][n];
for(int j=n-1;j>p;j--)
r[p]-=g[i][j]*r[j];
}
return r[0];
}
int main()
{
freopen ("tunel.in","r",stdin);
freopen ("tunel.out","w",stdout);
int ne;
scanf ("%d%d",&n,&ne);
for(int i=0;i<ne;i++){
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
a--,b--;
v[a].push_back (str (b,c));
v[b].push_back (str (a,c));
}
for(int i=0;i<n-1;i++){
g[i][i]=1;
for(vector<str>::iterator it=v[i].begin();it!=v[i].end();it++)
g[i][it->x]=-1.0/v[i].size(),g[i][n]+=it->c;
g[i][n]/=v[i].size();
}
g[n-1][n-1]=1;
printf ("%.4lf",gauss());
return 0;
}