bzoj-1854(二分图最大匹配)
题意:中文题意
解题思路:首先每个装备有2种属性,这个很关键。。。,就直接猜了要不2-sat,要不二分图,然后给出n,因为n数据很大,所以考虑属性大小最多为10000,就用属性建图,第一个属性值为x部,第二个属性值为y部,跑二分图最大匹配
代码
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+1000; int match[maxn]; int visit[maxn]; vector<int>v[maxn]; int n,maxx,cnt; int x[maxn],y[maxn]; int dfs(int u) { for(int i=0;i<v[u].size();i++) { int tmp=v[u][i]; if(visit[tmp]==cnt) continue; visit[tmp]=cnt; if(match[tmp]==-1||dfs(match[tmp])) { match[tmp]=u;return 1; } } return 0; } int main() { scanf("%d",&n); memset(match,-1,sizeof(match)); for(int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); v[x[i]].push_back(i); v[y[i]].push_back(i); } int ans=0; for(int i=1;i<=10000;i++) { ++cnt; if(dfs(i)) ans++; else break; } printf("%d\n",ans); }