20260719

📅 2026/7/19 11:58:59 👁️ 阅读次数 📝 编程学习
20260719

P2071 座位安排

思路

二分图模板。

考虑将一排拆成两个座位,座位在右,人在左。

然后人去匹配座位即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n, vis[10005], ans, rec[10005];
vector<int> g[4005];
int dfs(int u, int t)
{if(vis[u] == t) return 0;vis[u] = t;for(int v : g[u]){if(rec[v] == 0 || dfs(rec[v], t)){rec[v] = u;return 1;}}return 0;
}
signed main()
{cin >> n;for(int i = 1; i <= 2 * n; i ++){int x, y; cin >> x >> y;g[i].push_back(x + 2 * n), g[i].push_back(x + 3 * n);g[i].push_back(y + 2 * n), g[i].push_back(y + 3 * n);}for(int i = 1; i <= 2 * n; i ++){if(dfs(i, i)) ans ++;}cout << ans << endl;
}