Pagini recente » Cod sursa (job #2164743) | Cod sursa (job #1499841) | Cod sursa (job #2474942) | Cod sursa (job #2820431) | Cod sursa (job #818630)
Cod sursa(job #818630)
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <vector>
#include <stdlib.h>
#define NLen 256
#define EPS 0.001
using namespace std;
vector <int> g[NLen];
int num_edge[NLen][NLen];
int cost[NLen][NLen];
double E[NLen][NLen];
int grad[NLen];
int tm[NLen];
int N;
inline void make_system()
{
for(int nod=1;nod<N;++nod)
{
E[nod][nod]=grad[nod];
for(int adj=0;adj<g[nod].size();++adj)
{
if(g[nod][adj]!=N) E[nod][g[nod][adj]]-=num_edge[nod][g[nod][adj]];
E[nod][0]+=cost[nod][g[nod][adj]]*num_edge[nod][g[nod][adj]];
}
}
}
inline void do_gauss()
{
for(int i=1;i<N;++i)
{
if(E[i][i]!=1)
{
E[i][0]/=E[i][i];
for(int j=i+1;j<N;++j) E[i][j]/=E[i][i];
E[i][i]=1;
}
for(int r=i+1;r<N;++r)
if(abs(E[r][i])>EPS)
{
for(int c=i+1;c<N;++c)
E[r][c]-=E[r][i]*E[i][c];
E[r][0]-=E[r][i]*E[i][0];
E[r][i]=0;
}
}
}
inline void solve_system()
{
for(int i=N-1;i>0;--i)
{
tm[i]=E[i][0];
for(int j=i+1;j<N;++j)
tm[i]-=tm[j]*E[i][j];
}
}
int main()
{
freopen("tunel.in","r",stdin);
freopen("tunel.out","w",stdout);
int M;
cin>>N>>M;
int x,y,c;
for(int i=1;i<=M;++i)
{
cin>>x>>y>>c;
g[x].push_back(y);
g[y].push_back(x);
cost[x][y]=c;
cost[y][x]=c;
++num_edge[x][y];
++num_edge[y][x];
++grad[x];
++grad[y];
}
make_system();
do_gauss();
solve_system();
cout<<fixed<<setprecision(3);
cout<<tm[1]<<'\n';
return 0;
}