UVALive-3415 Guardian of Decency (最大独立集)
2015-11-06 10:42
423 查看
题目大意:一个老师要带一些学生去春游,但是要带的学生中任意两个人都满足下面四个条件中的至少一个:1、性别相同;2、身高差大与40公分;3、最喜欢的音乐类型不同;4、最喜欢的体育运动相同。问老师最多能带多少个学生?
题目分析:最大独立集问题。最大独立集+最小覆盖集=全集。将学生视为节点,对于任意两个不满足上述四个条件中的学生,连一条有向边。这就意味着一条边的两个端点至少有一个不能去春游,这与一条边中至少有一个去春游恰好互补,后者正是最小覆盖问题。
代码如下:
题目分析:最大独立集问题。最大独立集+最小覆盖集=全集。将学生视为节点,对于任意两个不满足上述四个条件中的学生,连一条有向边。这就意味着一条边的两个端点至少有一个不能去春游,这与一条边中至少有一个去春游恰好互补,后者正是最小覆盖问题。
代码如下:
# include<iostream> # include<cstdio> # include<string> # include<vector> # include<cstring> # include<algorithm> using namespace std; # define REP(i,s,n) for(int i=s;i<n;++i) # define CL(a,b) memset(a,b,sizeof(a)) # define CLL(a,b,n) fill(a,a+n,b) const int N=505; struct student { int high; char sex; string music,PE; }; student stu ; int n,vis ,link ; vector<int>G ; bool ok(int i,int j) { if(stu[i].sex==stu[j].sex) return false; if(stu[i].PE==stu[j].PE) return false; if(abs(stu[i].high-stu[j].high)>40) return false; if(stu[i].music!=stu[j].music) return false; return true; } bool dfs(int x) { REP(i,0,G[x].size()){ int y=G[x][i]; if(vis[y]) continue; vis[y]=1; if(link[y]==-1||dfs(link[y])){ link[y]=x; return true; } } return false; } int match() { int res=0; CL(link,-1); REP(i,1,n+1){ CL(vis,0); if(dfs(i)) ++res; } return res; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); REP(i,1,n+1) G[i].clear(); REP(i,1,n+1) cin>>stu[i].high>>stu[i].sex>>stu[i].music>>stu[i].PE; REP(i,1,n+1){ REP(j,i+1,n+1) if(ok(i,j)){ G[i].push_back(j); G[j].push_back(i); } } int ans=match(); printf("%d\n",n-ans/2); } return 0; }
相关文章推荐
- 1104文法分析
- java的重载、覆盖和隐藏的区别
- iOS中关于自定义Tabbar
- Spring Hello World 实例
- DUBBO的com.alibaba.dubbo.rpc.RpcException解决方法
- HttpURLConnection Get和Post发送数据
- OC基础知识--字符串处理方法
- 1014冒泡算法文法推导
- iOS9默认加载Https协议的相关设置
- A fatal error has been detected by the Java Runtime Environment(jdk 1.6的一个BUG)
- linux的进程管理
- 《从零开始学Swift》学习笔记(Day 32)——计算属性
- JConsole的使用手册 JDK1.5(转)
- C#读写文件中文乱码
- 在Unity项目中使用Git
- 手动更新maven私有仓库nexus的索引文件
- summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)
- iOS学习笔记
- iOS资源
- ActiveDirectory之日常常用PS命令