Pagini recente » Cod sursa (job #251799) | Cod sursa (job #831363) | Cod sursa (job #2006930) | Cod sursa (job #3196532) | Cod sursa (job #977943)
Cod sursa(job #977943)
#include<fstream>
#include<vector>
#include<iomanip>
#define eps 0.0001
using namespace std;
ifstream f("tunel.in");
ofstream g("tunel.out");
int n,m,i,j,l,k,x,y,c;
double a[256][256],r;
vector<pair<int,int> >v[256];
inline double abs(double x)
{
if(x<0)
return -x;
return x;
}
int main()
{
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y>>c;
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
}
a[n][n]=1;
for(i=1;i<n;++i)
{
r=1.0/v[i].size();
a[i][i]=1;
for(vector<pair<int,int> >::iterator it=v[i].begin();it!=v[i].end();++it)
{
a[i][it->first]-=r;
a[i][n+1]+=(it->second)*r;
}
}
for(i=j=1;i<=n&&j<=n;)
{
for(k=i;k<=n;++k)
if(abs(a[k][j])>eps)
break;
if(k==n+1)
{
++j;
continue;
}
if(i!=k)
{
for(l=1;l<=n+1;++l)
swap(a[i][l],a[k][l]);
}
for(l=1;l<=n;++l)
if(l!=j)
{
r=-a[l][j]/a[j][j];
for(k=1;k<=n;++k)
a[l][k]+=r*a[j][k];
a[l][n+1]+=r*a[j][n+1];
}
++i;
++j;
}
g<<fixed<<setprecision(6)<<a[1][n+1]<<'\n';
return 0;
}