Pagini recente » Cod sursa (job #1568042) | Cod sursa (job #602841) | Cod sursa (job #489332) | Cod sursa (job #3172683) | Cod sursa (job #1399223)
#include <vector>
#include <fstream>
#include <cmath>
#include <cstring>
#include <iomanip>
using namespace std;
const double eps=0.0000000001;
const int NMAX=260;
int n, i, x, y, c, k;
double sol[NMAX], a[NMAX][NMAX];
vector< pair<int,int> > g[NMAX];
void gauss()
{
int i=1, j=1, l, p;
while(i<=n&&j<=n)
{
for(k=i; k<=n; k++)
if(a[k][j]<-eps||a[k][j]>eps) break;
if(k==n+1)
{
j++;
continue;
}
if(k!=i)
for(l=1; l<=n+1; l++)
swap(a[i][l],a[k][l]);
for(l=j+1; l<=n+1; l++)
a[i][l]/=a[i][j];
a[i][j]=1.00;
for(p=i+1; p<=n; p++)
{
for(l=j+1; l<=n+1; l++)
a[p][l]-=a[i][l]*a[p][j];
a[p][j]=0;
}
i++;
j++;
}
for(i=n; i>=1; i--)
for(j=1; j<=n; j++)
{
if(a[i][j]>-eps&&a[i][j]<eps) continue;
sol[j]=a[i][n+1];
for(l=j+1; l<=n; l++)
sol[j]-=a[i][l]*sol[l];
break;
}
}
int main()
{
ifstream in("tunel.in");
ofstream out("tunel.out");
in>>n>>k;
for(i=1; i<=k; i++)
{
in>>x>>y>>c;
g[x].push_back(make_pair(y,c));
g[y].push_back(make_pair(x,c));
}
for(i=1; i<=n; i++)
{
a[i][i]=1;
double coef=1.00/g[i].size();
for(vector< pair<int,int> >::iterator it=g[i].begin(); it!=g[i].end(); it++)
{
a[i][it->first]-=coef;
a[i][n+1]+=coef*it->second;
}
}
gauss();
out<<setprecision(4)<<sol[1]<<'\n';
return 0;
}