Pagini recente » Cod sursa (job #618934) | Cod sursa (job #310152) | Cod sursa (job #2084550) | Cod sursa (job #48246) | Cod sursa (job #504583)
Cod sursa(job #504583)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 265
#define mp make_pair
#define FOR(i, v) for(vector<pair<int, int> > ::iterator i = v.begin(); i != v.end(); ++i)
vector< pair< int ,int > > G[NMAX];
int grad[NMAX];
double a[NMAX][NMAX];
int n, m;
void gauss(){
for(int i = 1; i <= n; ++i){
for(int k = i+1; k <= n; ++k)
for(int j = n+1;j >= i; --j)
if(a[k][i] != 0) a[k][j] -= a[k][i] / a[i][i] * a[i][j];
}
for(int j = n; j; --j){
if(a[j][n+1] != 0) a[j][n+1] /= a[j][j];
a[j][j] = 1;
for(int i = j-1; i; --i){
a[i][n+1] -= a[i][j] * a[j][n+1];
a[i][j] = 0;
}
}
}
void build(){
for(int i = 1; i < n; ++i){
a[i][i] = grad[i];
FOR(it, G[i]){
a[i][it->first] += -1;
a[i][n+1] += it->second;
}
}
a[n][n] = 1; a[n][n+1] = 0;
}
int main(){
freopen("tunel.in", "r", stdin);
freopen("tunel.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++i){
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
grad[x]++;
grad[y]++;
G[x].push_back(mp(y,c));
G[y].push_back(mp(x,c));
}
build();
gauss();
printf("%lf\n" ,a[1][n+1]);
return 0;
}