HDU 3829 二分图
来源:互联网 发布:c语言培训班4个月出来 编辑:程序博客网 时间:2024/05/21 22:33
点击打开链接
题意:动物园有n只猫,m条狗,还有p个小孩,每个小孩有一个喜欢的动物和一个讨厌的动物,如果一个小孩喜欢狗,那么他一定不喜欢猫,每个小孩高兴的条件是他喜欢的动物在动物园并且不喜欢的动物不在,问饲养员将那些动物移出动物园可以使最多的小孩高兴
思路:最后剩下的小孩他们之间喜欢和讨厌的是不会有冲突的,那么可以转化为开心的小朋友的最大独立集,最大独立集=顶点数-最大匹配;而这个最大匹配是什么呢,是有矛盾的小朋友的最大匹配,减去后就是没有矛盾的了
#include <queue>#include <vector>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=1010;struct edge{ int to,cap,rev; edge(){} edge(int a,int b,int c){to=a;cap=b;rev=c;}};vector<edge> G[maxn];int level[maxn],iter[maxn];void add_edge(int from,int to,int cap){ G[from].push_back(edge(to,cap,G[to].size())); G[to].push_back(edge(from,0,G[from].size()-1));}void bfs(int s){ memset(level,-1,sizeof(level)); queue<int>que; level[s]=0;que.push(s); while(!que.empty()){ int v=que.front();que.pop(); for(unsigned int i=0;i<G[v].size();i++){ edge &e=G[v][i]; if(e.cap>0&&level[e.to]<0){ level[e.to]=level[v]+1; que.push(e.to); } } }}int dfs(int v,int t,int f){ if(v==t) return f; for(int &i=iter[v];i<G[v].size();i++){ edge &e=G[v][i]; if(e.cap>0&&level[v]<level[e.to]){ int d=dfs(e.to,t,min(f,e.cap)); if(d>0){ e.cap-=d; G[e.to][e.rev].cap+=d; return d; } } } return 0;}int max_flow(int s,int t){ int flow=0; while(1){ bfs(s); if(level[t]<0) return flow; memset(iter,0,sizeof(iter)); int f; while((f=dfs(s,t,inf))>0) flow+=f; }}char str1[510][10],str2[510][10];int main(){ int n,m,p; while(scanf("%d%d%d",&n,&m,&p)!=-1){ for(int i=0;i<maxn;i++) G[i].clear(); for(int i=1;i<=p;i++){ scanf("%s%s",str1[i],str2[i]); } for(int i=1;i<=p;i++) add_edge(0,i,1); for(int i=p+1;i<=2*p;i++) add_edge(i,2*p+1,1); for(int i=1;i<=p;i++){ for(int j=i+1;j<=p;j++){ if(strcmp(str1[i],str2[j])==0||strcmp(str2[i],str1[j])==0){ add_edge(i,j+p,1); add_edge(j,i+p,1); } } } int ans=max_flow(0,2*p+1)/2; printf("%d\n",p-ans); } return 0;}
0 0
- HDU 3829 二分图
- hdu 3829 二分图最大独立集
- hdu 3829(二分图 有待复习)
- hdu 3829 二分图最大独立集
- HDU-2444 二分图
- HDU 1083 二分图
- HDU 1150 二分图
- HDU 1151 二分图
- HDU 1281 二分图
- hdu-2063 二分图
- HDU 2444 二分图
- 【HDU 1179 二分图 】
- HDU 5943 二分图
- HDU-1045-二分图
- HDU - 3395 二分图
- hdu 1045 二分图
- HDU-2063 二分图匹配
- HDU-2444 二分图匹配
- php安装
- 链表中环的入口结点
- java显示声音波形图示例
- 123
- UVa 101 - The Blocks Problem
- HDU 3829 二分图
- 第一篇博客
- Android多媒体开发(5)————利用Android AudioTrack播放mp3文件
- mysql相似于oracle的to_char() to_date()方法
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- #leetcode#263.Ugly Number
- singleTask 跳转Activity Bundle和intent参数值为null
- 直方图均衡化(opencv自写函数)
- storm 提交任务为成功,但也不报错。