Cod sursa(job #2814197)

Utilizator GhiuzanuEdward Ghiuzan Ghiuzanu Data 7 decembrie 2021 18:41:54
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 6.5 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <climits>
using namespace std;

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

class graf {
    int nrN;
    int nrM;
    vector<vector<int>> matriceAd;

public:
    graf(int n, int m, vector<vector<int>> &mat) {
        nrN = n;
        nrM = m;
        matriceAd = mat;
    }

    graf(int n, int m) {
        nrN = n;
        nrM = m;
    }

//    void citire_neorientat() {
//        for (int i = 0; i < nrM; ++i) {
//            int x, y;
//            fin >> x >> y;
//            matriceAd[x].push_back(y);
//            matriceAd[y].push_back(x);
//        }
//    }
//
//    void citire_orientat() {
//        for (int i = 0; i < nrM; ++i) {
//            int x, y;
//            fin >> x >> y;
//            matriceAd[x].push_back(y);
//        }
//    }
//
//    void citire_sortaret(vector<int> &dep){
//        for (int i = 0; i < nrM; ++i) {
//            int x, y;
//            fin>>x>>y;
//            matriceAd[x].push_back(y);
//            dep[y]++;
//        }
//    }
//
//    void citire_dijkstra(vector<vector<int>>& mat){
//        int a, b, c;
//        for (int i = 0; i < nrM; ++i) {
//            fin>>a>>b>>c;
//            mat[a][b] = c;
//        }
//    }
//
//    void BFS(int S) {
//        queue<int> coada;
//        int x, y;
//        vector<int> cost(nrN + 1, -1);
//        cost[S] = 0;
//        coada.push(S);
//        while (!coada.empty()) {
//            x = coada.front();
//            coada.pop();
//            for (int i = 0; i < matriceAd[x].size(); ++i) {
//                if (cost[matriceAd[x][i]] == -1) {
//                    cost[matriceAd[x][i]] = cost[x] + 1;
//                    coada.push(matriceAd[x][i]);
//                }
//            }
//        }
//        for (int i = 1; i < nrN + 1; i++)
//            fout << cost[i] << " ";
//    }
//
//    void DFS() {
//        queue<int> coada;
//        vector<int> viz(nrN + 1, 0);
//        int conex = 0;
//        for (int i = 1; i <= nrN; ++i) {
//            if (viz[i] == 0) {
//                conex++;
//                coada.push(i);
//                while (!coada.empty()) {
//                    int x = coada.front();
//                    viz[x]++;
//                    coada.pop();
//                    for (int j = 1; j < matriceAd[x].size(); ++j) {
//                        if (viz[matriceAd[x][j]] == 0)
//                            coada.push(matriceAd[x][j]);
//                    }
//                }
//            }
//        }
//        fout << conex;
//    }
//
//    void sortaret(vector<int> &dep){
//        queue<int> coada;
//        vector<int> sortare;
//        for (int i = 1; i < nrN + 1; ++i) {
//            if (dep[i] == 0)
//                coada.push(i);
//        }
//        while (!coada.empty()){
//            int x = coada.front();
//            sortare.push_back(x);
//            coada.pop();
//            for (int i = 1; i < matriceAd[x].size(); ++i) {
//                dep[matriceAd[x][i]]--;
//                if (dep[matriceAd[x][i]] == 0)
//                    coada.push(matriceAd[x][i]);
//            }
//        }
//        for (int i = 0; i < nrN; ++i) {
//            fout<<sortare[i]<<" ";
//        }
//    }
//
//    int reprez(int& x, vector<int> tata){
//        while (tata[x] != 0)
//            x = tata[x];
//        return x;
//    }
//
//    void op1(vector<int>& tata, vector<int>& h, int x, int y){
//        int a = reprez(x, tata), b = reprez(y, tata);
//        if (h[a] > h[b])
//            tata[b] = a;
//        else {
//            tata[a] = b;
//            if (h[a] == h[b])
//                h[b]++;
//        }
//    }
//
//    void op2(int x, int y, vector<int> tata){
//        if (x == y)
//            fout<<"DA"<<endl;
//        else
//            fout<<"NU"<<endl;
//    }
//
//    void solveDisjoint(){
//        vector<int> tata(nrN + 1, 0), h(nrN + 1, 0);
//        int op, x, y;
//        for (int i = 0; i < nrM; ++i) {
//            fin>>op>>x>>y;
//            if (op == 1)
//                op1(tata, h, x, y);
//            else
//                op2(reprez(x, tata), reprez(y, tata), tata);
//        }
//    }
//
//    int minDist(vector<int>& dist, vector<bool>& SP){
//        int min = INT_MAX, j;
//        for (int i = 0; i < nrN; ++i) {
//            if (!SP[i] && dist[i] <= min) {
//                min = dist[i];
//                j = i;
//            }
//        }
//        return j;
//    }
//
//    void dijkstra(vector<vector<int>>& mat, int s){
//        vector<int> dist (nrN + 1, INT_MAX);
//        vector<bool> shortestPath (nrN + 1, false);
//        dist[s] = 0;
//        for (int i = 0; i < nrN - 1; ++i) {
//            int u = minDist(dist, shortestPath);
//            cout<<u;
//            shortestPath[u] = true;
//            for (int j = 1; j <= nrN; ++j) {
//                if (!shortestPath[j] && mat[u][j] && dist[u] != INT_MAX && dist[u] + mat[u][j] < dist[j])
//                    dist[j] = dist[u] + mat[u][j];
//            }
//        }
//        for (int i = 2; i <= nrN; ++i) {
//            fout<<dist[i]<<' ';
//        }
//    }

    void flux(){
        vector<vector<pair<int,int>>> capacitate, flux;
        capacitate[1].push_back(make_pair(1,2));
    };
};

///BFS
//int main(){
//    int n, m, S;
//    fin >> n >> m >> S;
//    vector<vector<int>> mat;
//    vector<int> aux(1,-1);
//    mat.resize(n+1, aux);
//    graf G(n, m, mat);
//    G.citire_orientat();
//    G.BFS(S);
//    return 0;
//}

///DFS
//int main(){
//    int n, m;
//    fin>>n>>m;
//    vector<vector<int>> mat;
//    vector<int> aux(1,-1);
//    mat.resize(n+1, aux);
//    graf G(n, m, mat);
//    G.citire_neorientat();
//    G.DFS();
//    return 0;
//}

///sortaret
//int main(){
//    int n, m;
//    fin>>n>>m;
//    vector<int> dep(n + 1, 0);
//    vector<vector<int>> mat;
//    vector<int> aux(1,-1);
//    mat.resize(n+1, aux);
//    graf G(n, m, mat);
//    G.citire_sortaret(dep);
//    G.sortaret(dep);
//    return 0;
//}

///disjoint
//int main(){
//    int n, m;
//    fin>>n>>m;
//    graf G(n , m);
//    G.solveDisjoint();
//    return 0;
//}

///dijkstra
//int main(){
//    int n, m;
//    fin>>n>>m;
//    graf G(n, m);
//    vector<vector<int>> matAd;
//    vector<int> sec(n + 1, 0);
//    matAd.resize(n + 1, sec);
//    G.citire_dijkstra(matAd);
//    G.dijkstra(matAd, 1);
//    return 0;
//}

/////maxflow
int main(){
    int n, m;
    fin>>n>>m;
    vector<vector<int>> mat;
    vector<int> aux(1,-1);
    mat.resize(n+1, aux);
    graf G(n, m, mat);
    G.flux();
    return 0;
}