標籤:lightoj
題目連結:http://www.lightoj.com/volume_showproblem.php?problem=1184
根據一些要求建圖即可
代碼:
#include <iostream> #include <algorithm> #include <set> #include <map> #include <string.h> #include <queue> #include <sstream> #include <stdio.h> #include <math.h> #include <stdlib.h> using namespace std;int n, m;int p[1000][1000];int book[1000];int match[1000];int dfs(int u){ int i; for (i = 1; i <= m; i++) { if (book[i] == 0 && p[u][i] == 1) { book[i] = 1; if (match[i] == 0 || dfs(match[i])) { match[i] = u; return 1; } } } return 0;}struct peo{ int hig; int age; int ok;}a[110], b[110];int main(){ int t; int cases = 1; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d%d%d", &a[i].hig, &a[i].age, &a[i].ok); for (int i = 1; i <= m; i++) scanf("%d%d%d", &b[i].hig, &b[i].age, &b[i].ok); int ans = 0; memset(match, 0, sizeof(match)); memset(p, 0, sizeof(p)); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (a[i].ok == b[j].ok && abs(a[i].hig - b[j].hig) <= 12 && abs(a[i].age - b[j].age) <= 5) p[i][j] = 1; } for (int i = 1; i <= n; i++) { memset(book, 0, sizeof(book)); if (dfs(i)) ans++; } printf("Case %d: %d\n", cases++, ans); } return 0;}
著作權聲明:轉載請註明出處。
LightOJ 1184 - Marriage Media 【二分圖最大匹配】