HDU 1068
阿新 • • 發佈:2020-12-07
題目大意:
找出一個最大的集合使得該集合的任意兩個人沒有關係。
二分圖匹配模板題
最大獨立集=點數-最大匹配數
因為本題算出來的ans是最大匹配的兩倍,所以應當輸出n-ans/2
AC程式碼:
#include<iostream> #include<string.h> using namespace std; int ma[1001],used[1001],mp[1001][1001],n; int read(){ int f=1,ret=0; char c=getchar(); while (!isdigit(c)){ if (c=='-') f=-1; c=getchar(); } while (isdigit(c)) ret=ret*10+c-'0',c=getchar(); return ret; } bool solve(int now){ for (int i=0;i<n;i++){ if (mp[now][i] && !used[i]){ used[i]=1; if (ma[i]==-1 || solve(ma[i])){ ma[i]=now;return 1; } } } return 0; } int main(){ while(cin>>n){ memset(used,0,sizeof used); memset(ma,-1,sizeof ma); memset(mp,0,sizeof mp); for (int i=1;i<=n;i++){ int now=read(); int num=read(); for (intj=1;j<=num;j++){ int tmp=read(); mp[tmp][now]=1; } } int ans=0; for (int i=0;i<n;i++){ memset(used,0,sizeof used); ans+=solve(i); } cout<<n-ans/2<<endl; } return 0; }