本文主要是介绍POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题报告
http://blog.csdn.net/juncoder/article/details/38159017
题目传送门
题意:
看到题目我就笑了,,,
老师认为这样的两个学生不是一对:
身高相差40以上(年龄都不是距离了,身高又算什么)
不同性别(sad,,,就不允许基友存在呀,,,谁的肥皂掉了,,,)
喜欢不一样的歌曲类型(你总不能要求两人整天听小苹果吧,,,,,,你是我的小丫小苹果,,,,,,)
喜欢一样的运动( they are likely to be fans of different teams and that would result in fighting......这是什么理由,喜欢同个不同球队还会打起来)
问最多的不在一起的有多少人
思路:
不在一起代表独立于相爱关系的,也就是求最大独立集,集合里面任意两个人都不相爱
最大独立集=结点数-最大匹配
ps不知道是不是写挫了,重写才过,sad。。。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{int h;char sex;char mus[110];char spo[110];
}M[510],F[510];
int n,m,f,mmap[550][550],pre[550],vis[550];
int pd(int i,int j)
{if( abs(M[i].h - F[j].h) > 40 )return 0;if( strcmp(M[i].mus,F[j].mus) )return 0;if( strcmp(M[i].spo,F[j].spo) == 0 )return 0;return 1;
}
int dfs(int x)
{for(int i=m+1;i<=m+f;i++){if(!vis[i]&&mmap[x][i]){vis[i]=1;if(pre[i]==-1||dfs(pre[i])){pre[i]=x;return 1;}}}return 0;
}
int main()
{int i,j,t,h;char str[100];scanf("%d",&t);while(t--){scanf("%d",&n);m=f=1;memset(mmap,0,sizeof(mmap));memset(pre,-1,sizeof(pre));memset(M,0,sizeof(M));memset(F,0,sizeof(F));for(i=1;i<=n;i++){scanf("%d%s",&h,str);if(str[0]=='M'){scanf("%s%s",M[m].mus,M[m].spo);M[m].h=h;M[m++].sex='M';}else {scanf("%s%s",F[f].mus,F[f].spo);F[f].h=h;F[f++].sex='F';}}for(i=1;i<=m;i++){for(j=1;j<=f;j++){if(pd(i,j))mmap[i][m+j]=1;}}int ans=0;for(i=1;i<=m;i++){memset(vis,0,sizeof(vis));ans+=dfs(i);}printf("%d\n",n-ans);}
}
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 4876 | Accepted: 2056 |
Description
- Their height differs by more than 40 cm.
- They are of the same sex.
- Their preferred music style is different.
- Their favourite sport is the same (they are likely to be fans of different teams and that would result in fighting).
So, for any two persons that he brings on the excursion, they must satisfy at least one of the requirements above. Help him find the maximum number of persons he can take, given their vital information.
Input
- an integer h giving the height in cm;
- a character 'F' for female or 'M' for male;
- a string describing the preferred music style;
- a string with the name of the favourite sport.
No string in the input will contain more than 100 characters, nor will any string contain any whitespace.
Output
Sample Input
2 4 35 M classicism programming 0 M baroque skiing 43 M baroque chess 30 F baroque soccer 8 27 M romance programming 194 F baroque programming 67 M baroque ping-pong 51 M classicism programming 80 M classicism Paintball 35 M baroque ping-pong 39 F romance ping-pong 110 M romance Paintball
Sample Output
3 7
这篇关于POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!