BZOJ 1433 ZJOI 2009 假期的宿舍 最大流 Dinic
来源:互联网 发布:交换机取消mac绑定ip 编辑:程序博客网 时间:2024/05/17 01:10
题目大意:一个住校的问题,给出那些人住校,那些人不住校,那些人和那些人认识,认识的人可以谁他的床,问能不能满足所有人都有床住。
思路:二分图最大匹配,当然也可以用网络流来做。建图方法如下:
1.住校的人向T连边
2.想睡的人从S连边
3.互相认识的人连边
然后跑最大流,判断是否满流,输出结果。
CODE:
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX 110#define S 0#define T (points << 1|1)#define INF 0x3f3f3f3fusing namespace std;int cases,points;int map[MAX][MAX];int have_bed[MAX];int deep[MAX];bool BFS();int Dinic(int x,int flow);int main(){ for(cin >> cases;cases; --cases) { scanf("%d",&points); int cnt = 0; memset(map,0,sizeof(map)); for(int i = 1;i <= points; ++i) { scanf("%d",&have_bed[i]); if(have_bed[i]) map[i + points][T] = 1; } for(int x,i = 1;i <= points; ++i) { scanf("%d",&x); if(!have_bed[i] || (have_bed[i] && !x)) map[S][i] = 1,cnt++; } for(int i = 1;i <= points; ++i) for(int x,j = 1;j <= points; ++j) { scanf("%d",&x); if(x || i == j) map[i][j + points] = 1; } int ans = 0; while(BFS()) ans += Dinic(S,INF); if(ans == cnt) puts("^_^"); else puts("T_T"); } return 0;}bool BFS(){ static queue<int> q; while(!q.empty()) q.pop(); memset(deep,0,sizeof(deep)); deep[S] = 1; q.push(S); while(!q.empty()) { int x = q.front(); q.pop(); for(int i = S;i <= T; ++i) if(map[x][i] && !deep[i]) { deep[i] = deep[x] + 1; q.push(i); if(i == T) return true; } } return false;}int Dinic(int x,int flow){ if(x == T) return flow; int temp = flow; for(int i = S;i <= T; ++i) if(deep[i] == deep[x] + 1 && map[x][i] && temp) { int away = Dinic(i,min(temp,map[x][i])); if(!away) deep[i] = 0; map[x][i] -= away; map[i][x] += away; temp -= away; } return flow - temp;}
0 0
- BZOJ 1433 ZJOI 2009 假期的宿舍 最大流 Dinic
- BZOJ 1433 ZJOI2009 假期的宿舍 最大流
- BZOJ-1433 假期的宿舍 最大流+基础建图
- bzoj 1433: [ZJOI2009]假期的宿舍(最大流)
- BZOJ 1433: [ZJOI2009]假期的宿舍 二分图最大匹配
- bzoj 1433 假期的宿舍(网络流)
- bzoj 1433: [ZJOI2009]假期的宿舍 网络流
- bzoj 1433: [ZJOI2009]假期的宿舍
- 【BZOJ 1433】 [ZJOI2009]假期的宿舍
- 【BZOJ 1433】 [ZJOI2009]假期的宿舍
- bzoj 1433 [ZJOI2009]假期的宿舍
- BZOJ 1433: [ZJOI2009]假期的宿舍
- BZOJ 1433 [ZJOI2009]假期的宿舍
- bzoj 1433: [ZJOI2009]假期的宿舍
- bzoj 1433: [ZJOI2009]假期的宿舍
- BZOJ1433 假期的宿舍(最大流)
- 【BZOJ1433】【codevs2347】假期的宿舍,最大流
- 【BZOJ】1433 [ZJOI2009]假期的宿舍 二分图的最大匹配
- visual studio 2008中头文件和库文件路径设置
- SharePoint 入门
- poj 1222 枚举(关灯游戏)
- 如何选择合适的工具,比较常用几种 Oracle 工具
- 善用指针---const指针
- BZOJ 1433 ZJOI 2009 假期的宿舍 最大流 Dinic
- 图论必做题目
- leetcode-Best Time to Buy and Sell Stock II
- hdu 4571 Travel in time (Floyd+记忆化搜索)
- 高并发量网站解决方案
- html与Jsp文件的纠结
- 用js动态添加表单
- Linux管道编程实例
- zigbee协议栈简介