二分图最大独立集=点数n-二分图最大匹配。知道这个公式后,这道题就很easy了,,是一道裸题,最基本的二分图最大独立集,,图都是直接建好得。。。题目:
Time Limit: 5000MS | Memory Limit: 10000K | |
Total Submissions: 7452 | Accepted: 3242 |
Description
Input
Output
Sample Input
7 0: (3) 4 5 6 1: (2) 4 6 2: (0) 3: (0) 4: (2) 0 1 5: (1) 0 6: (2) 0 1 3 0: (2) 1 2 1: (1) 0 2: (1) 0
Sample Output
5 2ac代码:
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <vector> using namespace std; vector<int> ss[505]; int flag[505],visted[505]; bool dfs(int x){ for(int i=0;i<ss[x].size();++i){ if(!visted[ss[x][i]]){ visted[ss[x][i]]=1; if(flag[ss[x][i]]==-1||dfs(flag[ss[x][i]])){ flag[ss[x][i]]=x; return true; } } } return false; } int main(){ int n; while(~scanf("%d",&n)){ memset(ss,0,sizeof(ss)); memset(flag,-1,sizeof(flag)); int x,num,y,m=n; char ch1,ch2,ch3; while(m--){ cin>>x>>ch1>>ch2>>num>>ch3; while(num--){ scanf("%d",&y); ss[x].push_back(y); } } int sum=0; for(int i=0;i<n;++i){ memset(visted,0,sizeof(visted)); if(dfs(i)) sum++; } printf("%d\n",n-sum/2); } return 0; }