Pagini recente » Cod sursa (job #2179569) | Cod sursa (job #229846) | Cod sursa (job #2443387) | Monitorul de evaluare | Cod sursa (job #2279455)
#include <iostream>
#include <fstream>
#include <climits>
#include <windows.h>
#define N 100
using namespace std;
int capacity[N][N]; // maximalis kapacitasok adott [i][j] ut kozott
int flow[N][N]; // aktualis folyam adott [i][j] kozott
int n; // csomopontok szama
int m; // elek szama
int t[N], L[N], k = 1;
void init()
{
n = m = 0;
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < N; ++j)
{
capacity[i][j] = flow[i][j] = 0;
}
}
}
void beolvas()
{
cin >> n >> m;
int x, y, c;
for(int i = 1; i <= m; ++i)
{
cin >> x >> y >> c; // x csomopontbol van ut y-ba, c kapacitassal
capacity[x][y] = c;
}
}
void kiirJelenlegiFolyam()
{
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
cout << capacity[i][j] << " ";
}
cout << "\n";
}
}
int utkeres(int csp)
{
if(csp == n)
{
t[k] = csp;
return 1;
}
t[k] = csp;
for(int i = 1; i<=n; i++)
{
if((capacity[csp][i] != 0) && (L[i] == 0))
{
L[i] = 1;
k++;
int a = utkeres(i);
if(!a)
k--;
else return a;
}
}
return 0;
}
int minut()
{
int mini = INT_MAX;
for(int i = 2; i<=k; i++)
{
if(capacity[t[i-1]][t[i]] < mini)mini = capacity[t[i-1]][t[i]];
}
return mini;
}
void megold()
{
while(utkeres(1))
{
int mini = minut();
for(int i = 2; i<=k; i++)
{
capacity[t[i-1]][t[i]] = capacity[t[i-1]][t[i]] - mini;
capacity[t[i]][t[i-1]] = capacity[t[i]][t[i-1]] + mini;
}
for(int i = 2; i<=n; i++)
L[i] = 0;
L[1] = 1;
k = 1;
// cout<<endl;
// kiirJelenlegiFolyam();
}
int a = 0;
for(int i = 1; i<=n; i++)
{
if(capacity[n][i] != 0)a += capacity[n][i];
}
cout<<a;
}
int main()
{
freopen("adatok.txt", "rt", stdin);
init();
beolvas();
//kiirJelenlegiFolyam();
L[1] = 1;
megold();
return 0;
}