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; }
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; }