Pagini recente » Cod sursa (job #97872) | Cod sursa (job #2178807) | Cod sursa (job #181337) | Cod sursa (job #1204210) | Cod sursa (job #708792)
Cod sursa(job #708792)
#include <fstream>
using namespace std;
const int N=261;
double v[N][N];
int n,m;
ifstream in("tunel.in");
ofstream out("tunel.out");
inline void sch(double &a,double &b)
{
double c=a;a=b;b=c;
}
void sch(double a[],double b[])
{
for (int i=1;i<=m+1;i++)
sch(a[i],b[i]);
}
int find(int x,int i)
{
for (;i<=n;i++)
if (v[i][x]!=0)
return i;
return -1;
}
void reduce(double a[],double b[],double x)
{
for (int i=1;i<=m+1;i++)
a[i]-=x*b[i];
}
int gauss()
{
int L=1,i,j;
for (i=1;i<=m;i++)
{
j=find(i,L);
if (j==-1)
continue;
if (j!=L)
sch(v[j],v[L]);
double x=v[L][i];
for (j=1;j<=m+1;j++)
v[L][j]/=x;
for (int j=1;j<=n;j++)
if (j!=L)
reduce(v[j],v[L],v[j][i]);
L++;
}
return v[1][m+1];
}
void work(int x,int y,int c)
{
if (x==n)
return;
v[x][x]++;
v[x][n]+=c;
if (y!=n)
v[x][y]--;
}
int main()
{
int x,y,c;
in>>n>>m;
while (m--)
{
in>>x>>y>>c;
work(x,y,c);
work(y,x,c);
}
n--;
m=n;
out<<gauss()<<"\n";
return 0;
}