Pagini recente » Cod sursa (job #2866971) | Cod sursa (job #2052948) | Cod sursa (job #2030767) | Cod sursa (job #1583147) | Cod sursa (job #2190189)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define N_MAX 1001
#define MAX_VAL 999999
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
struct vertex{
int target;
int capacity;
};
struct map_thang{
int src_node;
int v_nr;
int minn;
map_thang()
{
src_node = -1;
v_nr = -1;
minn = MAX_VAL;
}
};
int n,m;
bool visited[N_MAX];
map_thang some_map[N_MAX];
vector<vertex> node[N_MAX];
queue<int> q;
int max_flow;
int bfs()
{
q.push(0);
int f = 0;
while(!q.empty())
{
int x = q.front();
//visited[x] = true;
q.pop();
for(int i=0;i<node[x].size();i++)
{
if(visited[ node[x][i].target ] == false && node[x][i].capacity > 0)
{
some_map[ node[x][i].target ].src_node = x;
some_map[ node[x][i].target ].v_nr = i;
some_map[ node[x][i].target ].minn = min(node[x][i].capacity,some_map[x].minn);
q.push( node[x][i].target );
}
}
f++;
}
return f;
}
/*int get_min_val(int nde)
{
if(some_map[node].src_node == -1) return node[nde][ some_map[nde].v_nr ].capacity;
}*/
void update_capacity(int nde,int minn)
{
int target_v = some_map[nde].v_nr;
int target_n = some_map[nde].src_node;
if(target_n != -1 )
{
node[target_n][target_v].capacity -= minn;
update_capacity(target_n,minn);
}
}
int main()
{
fin>>n>>m;
max_flow = 0;
int k1,k2,k3;
for(int i=0;i<m;i++)
{
fin>>k1>>k2>>k3;
vertex v;
v.capacity = k3;
v.target = k2-1;
node[k1-1].push_back(v);
}
while(bfs() > 1)
{
int l_min = some_map[n-1].minn;
max_flow += l_min;
update_capacity(n-1,l_min);
}
fout<<max_flow;
}