Cod sursa(job #2190189)

Utilizator mrhammerCiocan Cosmin mrhammer Data 29 martie 2018 23:43:35
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#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;
}