Exemplo n.º 1
0
int main() {
    int N, K;
    scanf("%d%d", &N, &K);

    Dinic dinic;
    const int S = 0, T = 2*N + 1;
    for (int i = 1; i <= N; i++) {
        dinic.addEdge(S, i, 1);
    }
    for (int i = N+1; i <= 2*N; i++) {
        dinic.addEdge(i, T, 1);
    }

    for (int i = 0; i < K; i++) {
        int r, c;
        scanf("%d%d", &r, &c);
        dinic.addEdge(r, N+c, Dinic::inf);
    }
    printf("%d\n", dinic.dinic(S, T));
    return 0;
}
Exemplo n.º 2
0
int main() {
    scanf("%d%d%d%d", &N, &M, &C1, &C2);
    Dinic dinic;
    dinic.addEdge(2*C1, 2*C1+1, Dinic::inf);
    dinic.addEdge(2*C2, 2*C2+1, Dinic::inf);

    for (int i = 1; i <= M; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        dinic.addEdge(2*u+1, 2*v, Dinic::inf);
        dinic.addEdge(2*v+1, 2*u, Dinic::inf);
    }
    for (int i = 1; i <= N; i++) {
        if (i != C1 && i != C2) {
            dinic.addEdge(2*i, 2*i+1, 1);
        }
    }

    printf("%d\n", dinic.dinic(2*C1, 2*C2+1));
    return 0;
}