Pagini recente » Cod sursa (job #2925824) | Cod sursa (job #2890318) | Cod sursa (job #1871830) | Cod sursa (job #2286161) | Cod sursa (job #2735620)
#include<bits/stdc++.h>
#define eps 0.001
using namespace std;
ofstream g("tunel.out");
class InputReader {
private:
static const int BUFF_SIZE = 100000;
FILE *f;
int bp;
char buff[BUFF_SIZE];
inline void nxt() {
if (++bp == BUFF_SIZE) {
fread(buff, sizeof(char), BUFF_SIZE, f);
bp = 0;
}
}
public:
InputReader (const char *file_name) {
f = fopen(file_name, "r");
bp = BUFF_SIZE - 1;
}
void close() {
fclose(f);
}
InputReader& operator >> (int &num) {
num = 0;
while (isdigit(buff[bp]) == 0&&buff[bp]!='-')
nxt();
int semn=1;
if(buff[bp]=='-')
{
semn=-1;
nxt();
}
while (isdigit(buff[bp])) {
num = num * 10 + (buff[bp] - '0')*semn;
nxt();
}
return *this;
}
} f("tunel.in");
long double a[260][260],v[260];//v[x]=expected value de a ajunge de la x la n
//v[x]=sum(v[y]+cost[x][y])/nr_muchii
inline bool zero(long double x)
{
return (x<eps&&x>-eps);
}
int main()
{
int n,i,j,x,y,m,z;
f>>n>>m;
for(j=1;j<=m;j++)
{
f>>x>>y>>z;
a[x][y]--;
a[y][x]--;
a[x][n+1]+=z;
a[y][n+1]+=z;
a[x][x]++;
a[y][y]++;
}
x=1;
y=1;
while(x<=n&&y<=n)
{
for(i=x;i<=n;i++)
if(!zero(a[i][y]))
break;
if(i!=n+1)
{
if(i!=x)
swap(a[x],a[i]);
for(j=y+1;j<=n+1;j++)
a[x][j]/=a[x][y];
a[x][y]=1;
for(i=x+1;i<=n;i++)
{
for(j=y+1;j<=n+1;j++)
a[i][j]-=a[x][j]*a[i][y];
a[i][y]=0;
}
x++;
}
y++;
}
for(x=n;x>=1;x--)
{
for(y=1;y<=n+1;y++)
if(!zero(a[x][y]))
break;
v[y]=a[x][n+1];
for(j=y+1;j<=n;j++)
v[y]-=a[x][j]*v[j];
}
g<<fixed<<setprecision(5)<<v[1]<<" ";
return 0;
}