Click to open link
Minimum path overlay with a direction-free graph = number of vertices-maximum match
#include <queue> #include <cstdio> #include <cstring> #include <iostream> #include < algorithm>using namespace Std;const int maxn = 150;int g[maxn][maxn];int N, m;int link[maxn];bool used[maxn];bool dfs (i NT u) {for (int v=1; v<=n; ++v) if (G[u][v]&&!used[v]) {Used[v] = true; if (Link[v]==-1 | | dfs (LINK[V])) {Link[v] = u; return true; }} return false;} int Hungary () {int res = 0; memset (link,-1, sizeof link); for (int i=1; i<=n; ++i) {memset (used, 0, sizeof used); if (Dfs (i)) res++; } return res; int main () {int u, V, t; scanf ("%d", &t); while (t--) {scanf ("%d%d", &n, &m); memset (g, 0, sizeof G); for (int i=1; i<=m; ++i) {scanf ("%d%d", &u, &v); G[U][V] = 1; } int cnt = Hungary (); printf ("%d\n", n-cnt); } return 0;}
hdu1151 Air raid,dag Minimum Path overlay