Cod sursa(job #3303994)

Utilizator unomMirel Costel unom Data 19 iulie 2025 16:49:41
Problema Cuplaj maxim de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>

using namespace std;

struct edge
{
    int cap, cost, initial;
};

ifstream in("cmcm.in");
ofstream out("cmcm.out");
int nst, ndr, m, cntedge, cntnod, source, dest;
vector<pair<int, int>> v[1255];
edge muc[200005];
int inv[200005];

void add_edge(int a, int b, int cap, int cost, int initial)
{
    cntedge++;
    muc[cntedge] = {cap, cost, initial};
    v[a].push_back({b, cntedge});

    cntedge++;
    muc[cntedge] = {0, -cost, 0};
    v[b].push_back({a, cntedge});

    inv[cntedge - 1] = cntedge;
    inv[cntedge] = cntedge - 1;
}

int main()
{
    in>>nst>>ndr>>m;

    int x, y, z;
    for(int i = 1; i<=m; i++)
    {
        in>>x>>y>>z;

        add_edge(x, y + nst, 1, z, 1);
    }

    cntnod = nst + ndr;

    cntnod++;
    source = cntnod;

    cntnod++;
    dest = cntnod;

    for(int i = 1; i<=nst; i++)
    {
        cntnod++;

        add_edge(cntnod, i, 1, 0, 0);
        add_edge(source, cntnod, 1, 0, 0);
    }

    for(int i = nst + 1; i<=nst + ndr; i++)
    {
        cntnod++;

        add_edge(i, cntnod, 1, 0, 0);
        add_edge(cntnod, dest, 1, 0, 0);
    }

    return 0;
}