Pagini recente » Cod sursa (job #1328785) | Cod sursa (job #1480877) | Cod sursa (job #2525667) | Cod sursa (job #2891779) | Cod sursa (job #2027321)
#include<fstream>
#include<vector>
#include<iomanip>
#include<utility>
#define N 255
#define EPS 1e-6
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;
}
int k=1;
for(i=1;i<n;i++,k++){
int l=k;
while(l<n &&A[l][i]<EPS &&A[l][i]>-EPS) l++;
if (l==n){
k--;
continue;
}
for(j=1;j<=n;j++){
A[i][0]=A[l][j];
A[l][j]=A[k][j];
A[k][j]=A[i][0];
}
for(l=1;l<n;l++){
if (l==k) continue;
if (A[l][i]>EPS ||A[l][i]<-EPS){
double aux=A[l][i]/A[k][i];
for(j=i;j<=n;j++)
A[l][j]-=(A[k][j]*aux);
}
}
}
double ans=A[1][n]/A[1][1];
fout<<setprecision(6)<<fixed<<ans;
return 0;
}