Pagini recente » Cod sursa (job #3315928) | Cod sursa (job #3310429) | Monitorul de evaluare | Cod sursa (job #3358153) | Cod sursa (job #3358632)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream in("tunel.in");
ofstream out("tunel.out");
const double EPS=1e-7;
int n, m;
vector<vector<double>> a;
vector<double> b, sol, poz;
void init()
{
a.resize(n);
b.resize(n);
for(int i=0;i<n;i++)
a[i].resize(n);
}
void gauss()
{
sol.assign(n, 0);
poz.assign(n, -1);
int i=0, j=0;
for(;i<n && j<n;j++)
{
for(int ii=i+1;ii<n;ii++)
if(abs(a[ii][j])>abs(a[i][j]))
{
swap(a[i], a[ii]);
swap(b[i], b[ii]);
}
if(abs(a[i][j])<EPS)
continue;
poz[j]=i;
for(int ii=0;ii<n;ii++)
if(ii!=i)
{
double q=a[ii][j]/a[i][j];
for(int jj=0;jj<n;jj++)
a[ii][jj]-=q*a[i][jj];
b[ii]-=q*b[i];
a[ii][j]=0;
}
i++;
}
for(j=0;j<n;j++)
if(poz[j]!=-1)
sol[j]=b[poz[j]]/a[poz[j]][j];
}
int main()
{
in>>n>>m;
init();
while(m--)
{
int u, v, c; in>>u>>v>>c;
u--; v--;
a[u][u]++; a[v][v]++;
a[u][v]--; a[v][u]--;
b[u]+=c; b[v]+=c;
}
for(int i=0;i<n;i++)
a[n-1][i]=0;
a[n-1][n-1]=1;
b[n-1]=0;
gauss();
out<<round(sol[0]);
return 0;
}