Pagini recente » Cod sursa (job #2367729) | Istoria paginii runda/simunat_07_10_2021/clasament | Istoria paginii runda/simulare_oji_2023_clasele_11_12_12_martie/clasament | Cod sursa (job #1931567) | Cod sursa (job #847743)
Cod sursa(job #847743)
#include <fstream>
#include <cstring>
#include <iomanip>
#define NMAX 256
using namespace std;
ifstream in;
ofstream out;
int cnt[NMAX][NMAX];
double g[NMAX][NMAX];
int cost[NMAX][NMAX];
int grad[NMAX];
double t[NMAX];
int main()
{
int M,N,x,y,c;
memset(grad,0,sizeof(grad));
memset(cnt,0,sizeof(cnt));
in.open("tunel.in");
in>>N>>M;
for(int i=1;i<=M;++i)
{
in>>x>>y>>c;
cost[y][x]+=c;
cost[x][y]+=c;
++cnt[x][y];
++cnt[y][x];
++grad[x];
++grad[y];
}
in.close();
memset(t,0,sizeof(t));
memset(g,0,sizeof(g));
for(int i=1;i<N;++i)
{
g[i][i]=grad[i];
for(int j=1;j<=N;++j)
if(cost[i][j])
{
if(j!=N) g[i][j]-=cnt[i][j];
g[i][N]+=cost[i][j];
}
for(int j=1;j<=N;++j)
g[i][j]/=grad[i];
}
for(int i=1;i<N;++i)
{
if(g[i][i]!=1)
{
for(int j=i+1;j<=N;++j) g[i][j]/=g[i][i];
g[i][i]=1;
}
for(int r=i+1;r<N;++r)
if(g[r][i]!=0)
{
for(int j=i+1;j<=N;++j)
g[r][j]-=g[r][i]*g[i][j];
g[r][i]=0;
}
}
for(int i=N-1;i>0;--i)
{
t[i]=g[i][N];
for(int j=i+1;j<N;++j)
t[i]-=t[j]*g[i][j];
}
out.open("tunel.out");
out<<fixed<<setprecision(3)<<t[1]<<'\n';
out.close();
return 0;
}