Pagini recente » Cod sursa (job #876272) | Cod sursa (job #2961212) | Cod sursa (job #2560030) | Cod sursa (job #2793326) | Cod sursa (job #717709)
Cod sursa(job #717709)
#include<stdio.h>
#include<vector>
using namespace std;
FILE*f=fopen("flux.in","r");
FILE*g=fopen("flux.out","w");
int n,m;
double maxx,a[103][103],w[104];
struct muchii
{
int x,y,z;
}v[5002];
double intreg (double a)
{
if(a<0)
return -a;
return a;
}
vector <int> V[102];
char viz[103];
void dfs(int nod)
{
viz[nod]=1;
for(int i=0;i<V[nod].size();++i)
if(!viz[V[nod][i]])
dfs(V[nod][i]);
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
V[v[i].x].push_back (v[i].y);
V[v[i].y].push_back (v[i].x);
a[v[i].x][v[i].x]++;
a[v[i].x][v[i].y]--;
a[v[i].y][v[i].x]--;
a[v[i].y][v[i].y]++;
}
a[n][n+1]=1;
for(int i=2;i<=n;++i)
{
int t=i;
while(!a[t][i]&&t<=n)
++t;
if(t<=n)
{
for(int ii=i;ii<=n+1;++ii)
{
double aux=a[i][ii];
a[i][ii]=a[t][ii];
a[t][ii]=aux;
}
for(int j=i+1;j<=n;++j)
{
double y=a[j][i]/a[i][i];
for(t=i;t<=n+1;++t)
a[j][t]-=y*a[i][t];
}
}
}
for(int i=n;i>1;--i)
{
for(int j=n;j>i;--j)
a[i][n+1]-=w[j]*a[i][j];
w[i]=a[i][n+1]/a[i][i];
}
dfs(1);
if(viz[n])
{
maxx=2000000000;
for(int i=1;i<=m;++i)
if(intreg(v[i].z/(w[v[i].y]-w[v[i].x]))<maxx)
maxx=intreg(v[i].z/(w[v[i].y]-w[v[i].x]));
}else
fprintf(g,"0");
fprintf(g,"%.3lf",maxx);
fclose(f);
fclose(g);
return 0;
}