Pagini recente » Cod sursa (job #2525438) | Cod sursa (job #2835795) | Cod sursa (job #2844907) | Cod sursa (job #2513075) | Cod sursa (job #2350467)
#include <fstream>
#include <cmath>
#include <iomanip>
#include <vector>
using namespace std;
ifstream fi("tunel.in");
ofstream fo("tunel.out");
const int NMAX=300;
const double eps=1e-3;
int n,m,grad[NMAX],x,y,t;
double A[NMAX][NMAX],X[NMAX],val;
vector <pair<int,int>> V[NMAX];
int main()
{
fi>>n>>m;
for(int i=1;i<=m;i++)
{
fi>>x>>y>>t;
grad[x]++; grad[y]++;
V[x].push_back({y,t});
V[y].push_back({x,t});
}
for(int i=1;i<=n;i++)
{
A[i][i]=-grad[i];
for(auto edge: V[i])
{
int j=edge.first;
int t=edge.second;
A[i][n+1]-=(double)t;
A[i][j]=1;
}
}
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
if(abs(A[j][i])>eps)
{
if(i!=j)
for(int k=1;k<=n+1;k++)
swap(A[i][k],A[j][k]);
for(int k=n+1;k>=i;k--)
A[i][k]/=A[i][i];
for(int l=i+1;l<=n;l++)
{
val=A[l][i]/A[i][i];
A[l][i]=0;
for(int k=i+1;k<=n+1;k++)
A[l][k]-=val*A[i][k];
}
}
for(int i=n;i>=1;i--)
{
val=A[i][n+1];
for(int j=n;j>i;j--)
val-=A[i][j]*X[j];
if(A[i][i]==0) X[i]=0;
else X[i]=val/A[i][i];
}
fo<<fixed<<setprecision(4)<<X[1]<<"\n";
fi.close();
fo.close();
return 0;
}