Pagini recente » Cod sursa (job #108000) | Cod sursa (job #269243) | Cod sursa (job #27601) | Cod sursa (job #3259854) | Cod sursa (job #2961659)
#include <bits/stdc++.h>
#define L 260
#define EPS 0.00001
using namespace std;
ifstream fin("tunel.in");
ofstream fout("tunel.out");
pair <int, int> v[L];
vector <pair <int, int>> G[L];
double m[L][L];
bool vis[L];
bool cmp(const pair <int, int> &a, const pair <int, int> &b){
return a.first < b.first;
}
int main(){
int n, e;
fin >> n >> e;
for (int i = 0; i < e; i++){
int a, b, c;
fin >> a >> b >> c;
G[a].push_back({b, c});
G[b].push_back({a, c});
}
for (int i = 1; i < n; i++){
int coef = G[i].size(), j = 0;
for (auto it : G[i])
v[j++] = it;
sort(v, v + j, cmp);
int l = 0;
for (int k = 1; k <= n; k++){
if (k == v[l].first){
while (l < j && k == v[l].first){
m[i][k] += (double)1 / coef;
m[i][n + 1] -= (double)1 / coef * v[l].second;
l++;
}
}
else if (k == i){
m[i][k] = -1;
}
}
}
m[n][n] = 1;
for (int j = 1; j <= n; j++){
int rel = -1;
for (int i = 1; i <= n; i++)
if (abs(m[i][j]) > EPS && !vis[i]){
rel = i;
i = n;
}
vis[rel] = true;
double x = m[rel][j];
for (int k = 1; k <= n + 1; k++)
m[rel][k] /= x;
for (int i = 1; i <= n; i++)
if (i != rel){
double coef = m[i][j];
for (int k = 1; k <= n + 1; k++)
m[i][k] -= coef * m[rel][k];
}
}
fout << setprecision(5) << m[1][n + 1] << "\n";
return 0;
}