Pagini recente » Cod sursa (job #443475) | Cod sursa (job #869177) | Cod sursa (job #833681) | Cod sursa (job #820666) | Cod sursa (job #640623)
Cod sursa(job #640623)
#include<stdio.h>
#include<assert.h>
#include<vector>
using namespace std;
vector<int> a[256];
int n,m;
double s,d[256],sol[256],gus[256][256];
void read()
{
assert(freopen("tunel.in","r",stdin)!=NULL);
int i,x,y,c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
a[x].push_back(y);
a[x].push_back(c);
a[y].push_back(x);
a[y].push_back(c);
}
}
void construct_system()
{
int i,j;
for(i=1;i<n;++i)
{
gus[i][i]=1;
for(j=0;j<a[i].size();j+=2)
{
sol[i]+=(double)2/a[i].size()*a[i][j+1];
gus[i][a[i][j]]-=(double)2/a[i].size();
}
}
/*for(i=1;i<n;++i)
{
for(j=1;j<n;++j)
printf("%lf ",gus[i][j]);
printf("\n");
}
for(i=1;i<n;++i)
printf("%lf\n",sol[i]);*/
}
void add_line(int x,int y,double cf)
{
int i;
sol[x]=(double)sol[x]+sol[y]*cf;
for(i=1;i<n;++i)
gus[x][i]=(double)gus[x][i]+gus[y][i]*cf;
}
void solve_system()
{
int i,j;
for(i=1;i<n;++i)
{
for(j=1;j<n;++j)
if(i!=j && gus[i][i]!=0)
add_line(j,i,(double)-gus[j][i]/gus[i][i]);
}
for(i=1;i<n;++i)
d[i]=sol[i]/gus[i][i];
}
void solve()
{
construct_system();
solve_system();
s=d[1];
}
void write()
{
assert(freopen("tunel.out","w",stdout)!=NULL);
printf("%lf",s);
}
int main()
{
//assert(freopen("tunel.wa","w",stdout)!=NULL);
read();
solve();
write();
return 0;
}