Pagini recente » Cod sursa (job #2587386) | Cod sursa (job #159036) | Cod sursa (job #2443829) | Cod sursa (job #2380141) | Cod sursa (job #2481232)
#include <fstream>
#include<queue>
#include<iomanip>
#define ver 0.000000001
using namespace std;
ifstream fin ("tunel.in");
ofstream fout("tunel.out");
int n,m,i,j,x,y,z,ok;
double aux,a[260][260],sol[260];
vector<pair<int,int> > v[260];
int main ()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
for(i=1;i<n;i++)
{
a[i][i]=1;aux=v[i].size();
for(auto it:v[i])
{
a[i][it.first]-=1.0/aux;
a[i][n+1]+=1.0*it.second/aux;
}
}
a[n][n]=1;
x=1;y=1;
while(x<=n&&y<=n)
{
ok=0;
for(i=x;i<=n;i++)
{
if(a[i][y]<-ver||a[i][y]>ver)
{
ok=1;
if(i!=x) for(j=1;j<=n+1;j++)
swap(a[i][j],a[x][j]);
break;
}
}
if(ok==0){y++;continue;}
for(j=y+1;j<=n+1;j++) a[x][j]/=a[x][y];
a[x][y]=1;
for(i=x+1;i<=n;i++)
{
for(j=y+1;j<=n+1;j++) a[i][j]-=a[i][y]*a[x][j];
a[i][y]=0;
}
x++;y++;
}
for(i=n;i>=1;i--)
{
ok=0;
for(j=1;j<=n+1;j++)
if(a[i][j]<-ver||a[i][j]>ver)
{
ok=j;
break;
}
if(ok==0) continue;
for(j=ok+1;j<=n;j++) a[i][n+1]-=a[i][j]*sol[j];
sol[ok]=a[i][n+1];
}
fout<<setprecision(5)<<fixed<<sol[1];
return 0;
}