题目:连续攻击游戏
思路:二分图匹配问题。
代码:
#include<bits/stdc++.h>
using namespace std;#define maxn 1000000
#define maxm 10000
#define read(x) scanf("%d",&x)int n;
vector<int> a[maxn+5];
int use[maxm+5];
int mch[maxn+5];int dfs(int x) {
if(use[x]) return false;use[x]=true;for(int i=0;i<a[x].size();i++) {
int y=a[x][i];if((!mch[y])||dfs(mch[y])) {
mch[y]=x;return true;}}return false;
}int main() {
read(n);for(int i=1;i<=n;i++) {
int x,y;read(x),read(y);a[x].push_back(i);a[y].push_back(i);}int ans=0;for(int i=1;i<=maxm;i++) {
if(dfs(i)) ans++;else break;memset(use,0,sizeof(use));}printf("%d",ans);}