Pagini recente » Arhiva Educationala | Borderou de evaluare (job #870810) | Cod sursa (job #2602075) | Borderou de evaluare (job #1170075) | Cod sursa (job #2237521)
#include<fstream>
#include<iomanip>
#include<vector>
using namespace std;
ifstream fin("tunel.in");
ofstream fout("tunel.out");
const int Eps=0.000001;
vector <pair <int, int> > G[255];
int N,M;
double A[255][255];
void Constr(){
for(int i=1;i<N;i++){
A[i][i]=A[i][i]-G[i].size();
int K=0;
for(int j=0;j<G[i].size();j++){
A[i][G[i][j].first]=A[i][G[i][j].first]+1;
K=K-G[i][j].second;
}
A[i][N+1]=K;
}
A[N][N]=1;
}
void Gauss(){
for(int i=1;i<=N;i++){
if(A[i][i]>-Eps && A[i][i]<Eps){
int j=i+1;
while(A[i][j]>-Eps && A[i][j]<Eps)
j++;
swap(A[i],A[j]);
}
for(int j=1;j<=N;j++){
if(i==j)
continue;
double K=A[j][i]/A[i][i];
for(int p=1;p<=N+1;p++)
A[j][p]=A[j][p]-K*A[i][p];
}
}
}
int main(){
fin>>N>>M;
for(int i=1;i<=M;i++){
int X,Y,Z;
fin>>X>>Y>>Z;
G[X].push_back(make_pair(Y,Z));
G[Y].push_back(make_pair(X,Z));
}
Constr();
Gauss();
fout<<setprecision(3)<<fixed<<A[1][N+1]/A[1][1];
}