Pagini recente » Cod sursa (job #97723) | Cod sursa (job #1491095) | Cod sursa (job #613388) | Cod sursa (job #1507062) | Cod sursa (job #2027323)
#include<fstream>
#include<vector>
#include<iomanip>
#include<utility>
#define N 255
#define EPS 1e-8
using namespace std;
vector<pair<int,int> > vecin[N+1];
double A[N+1][N+1];
ifstream fin("tunel.in");
ofstream fout("tunel.out");
int main(){
int n,m,i,j;
fin>>n>>m;
for(i=1;i<=m;i++){
int a,b,c;
fin>>a>>b>>c;
vecin[a].push_back(make_pair(b,c));
vecin[b].push_back(make_pair(a,c));
}
for(i=1;i<n;i++){
A[i][i]=-1;
double s=0;
for(j=0;j<vecin[i].size();j++){
int now=vecin[i][j].first;
int cost=vecin[i][j].second;
A[i][now]+=(1.0/vecin[i].size());
s+=(1.0*cost/vecin[i].size());
}
A[i][n]=-s;
}
for(i=1;i<n;i++){
int l=i;
while(l<n &&A[l][i]<EPS &&A[l][i]>-EPS) l++;
if (l==n) continue;
for(j=1;j<=n;j++){
A[i][0]=A[l][j];
A[l][j]=A[i][j];
A[i][j]=A[i][0];
}
for(l=1;l<n;l++){
if (l==i) continue;
if (A[l][i]>EPS ||A[l][i]<-EPS){
double aux=A[l][i]/A[i][i];
for(j=i;j<=n;j++)
A[l][j]-=(A[i][j]*aux);
}
}
}
double ans=A[1][n]/A[1][1];
fout<<setprecision(6)<<fixed<<ans;
return 0;
}