Pagini recente » Cod sursa (job #815533) | Cod sursa (job #218550) | Cod sursa (job #322058) | Cod sursa (job #1656228) | Cod sursa (job #1794104)
#include <fstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <iomanip>
#include <bitset>
using namespace std;
ifstream in ( "flux.in" );
ofstream out( "flux.out" );
const int DIM = 1e2 + 5;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-5;
vector< pair<int, int> > g[DIM]; bitset<DIM> ma;
double sys[DIM][DIM], sol[DIM];
void dfs( int x ) {
ma[x] = 1;
for( auto y : g[x] ) {
if( ma[y.first] == 0 ) {
dfs( y.first ); } }
return; }
int main( int argc, const char *argv[] ) {
ios::sync_with_stdio( false );
int n, m; in >> n >> m;
for( int i = 1; i <= m; i ++ ) {
int x, y, z; in >> x >> y >> z;
g[x].push_back( make_pair(y, z) );
g[y].push_back( make_pair(x, z) ); }
for( int x = 2; x < n; x ++ ) {
for( auto y : g[x] ) {
sys[x][x] ++; sys[x][y.first] --; } }
sys[1][1] = sys[n][n] = sys[n][n + 1] = 1;
for( int i = 1, j = 1, ok = 0; i <= n && j <= n; ok = 0 ) {
for( int k = i; k <= n; k ++ ) {
if( fabs( sys[k][j] ) > EPS ) {
swap_ranges( sys[i], sys[i] + n + 2, sys[k] ); ok = 1; break; } }
if( ok == 0 ) {
j ++; }
else {
for( int k = n + 1; k >= j; k -- ) {
sys[i][k] /= sys[i][j]; }
for( int k = i + 1; k <= n; k ++ ) {
for( int p = n + 1; p >= j; p -- ) {
sys[k][p] -= sys[k][j] * sys[i][p]; } }
i ++; j ++; } }
for( int i = n, j = 1; i >= 1; i --, j = 1 ) {
while( fabs( sys[i][j] ) < EPS ) {
j ++; }
sol[j] = sys[i][n + 1];
for( int k = j + 1; k <= n; k ++ ) {
sol[j] -= sol[k] * sys[i][k]; } }
double aux = 0;
for( int x = 1; x <= n; x ++ ) {
for( auto y : g[x] ) {
aux = max( aux, (sol[y.first] - sol[x]) / y.second ); } }
double ans = 0;
for( auto y : g[n] ) {
ans += (sol[n] - sol[y.first]) / aux; }
dfs( 1 ); if( ma[n] == 0 ) { ans = 0; }
out << setprecision(3) << fixed << ans << endl;
return 0; }