1433: [ZJOI2009]假期的宿舍

Time Limit: 10 Sec  Memory Limit: 162 MB

Description

Input

Output

Sample Input

1
3
1 1 0
0 1 0
0 1 1
1 0 0
1 0 0

Sample Output

ˆ ˆ

HINT

对于30% 的数据满足1 ≤ n ≤ 12。
对于100% 的数据满足1 ≤ n ≤ 50,1 ≤ T ≤ 20。

我们从源点向所有住宿的人连边,从所有的床位连向汇点,然后再从人连向他所认识的人的床位

这样建边,然后跑最大流

这样答案如果和住宿人数相等则满足,否则不满足

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. #define inf 100007
  7. #define F(i) for(i=1;i<=n;i++)
  8. #define N 50010
  9. #define M 110
  10. inline int rd()
  11. {
  12. int x=,f=;char ch=getchar();
  13. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  14. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  15. return x*f;
  16. }
  17. int lj[M],fro[N],to[N],cnt,v[N],S,T=;
  18. inline void add(int a,int b,int c){fro[++cnt]=lj[a];to[cnt]=b;v[cnt]=c;lj[a]=cnt;}
  19. inline void ins(int a,int b,int c){add(a,b,c);add(b,a,);}
  20. int dis[M],q[N],h,t;
  21. bool bfs()
  22. {
  23. memset(dis,,sizeof(dis));
  24. dis[]=h=t=;q[]=;
  25. int tp;
  26. while(h<=t)
  27. {
  28. tp=q[h++];
  29. for(int i=lj[tp];i;i=fro[i])
  30. {
  31. if(!dis[to[i]]&&v[i])
  32. {
  33. dis[to[i]]=dis[tp]+;
  34. q[++t]=to[i];
  35. }
  36. }
  37. }
  38. return dis[T]?:;
  39. }
  40. int dfs(int x,int p)
  41. {
  42. if(x==T) return p;
  43. int tp,res=;
  44. for(int i=lj[x];i;i=fro[i])
  45. {
  46. if(v[i]&&dis[to[i]]==dis[x]+)
  47. {
  48. tp=dfs(to[i],min(p-res,v[i]));
  49. v[i]-=tp;
  50. v[i^]+=tp;
  51. res+=tp;
  52. if(res==p) return p;
  53. }
  54. }
  55. if(res==) dis[x]=;
  56. return res;
  57. }
  58. int n,tt,sc[M],tot,ans;
  59. int main()
  60. {
  61. tt=rd();
  62. int i,j,x;
  63. while(tt--)
  64. {
  65. tot=ans=;
  66. memset(lj,,sizeof(lj));cnt=;
  67. n=rd();
  68. F(i){
  69. sc[i]=rd();
  70. if(sc[i]) ins(i+n,T,);
  71. }
  72. F(i){
  73. x=rd();
  74. if((sc[i]&&!x)||!sc[i])
  75. {
  76. ins(,i,);
  77. tot++;
  78. }
  79. }
  80. F(i) F(j)
  81. {
  82. x=rd();
  83. if(x||i==j) ins(i,j+n,);
  84. }
  85. while(bfs()) ans+=dfs(,inf);
  86. if(tot==ans) puts("^_^");
  87. else puts("T_T");
  88. }
  89. }

bzoj 1433: [ZJOI2009]假期的宿舍 -- 最大流的更多相关文章

  1. bzoj 1433: [ZJOI2009]假期的宿舍

    1433: [ZJOI2009]假期的宿舍 Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 Sample ...

  2. BZOJ 1433 [ZJOI2009]假期的宿舍(网络流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1433 [题目大意] 在校学生有自己的床,外校的则没有,如果两个同学相互认识,则可以借用 ...

  3. bzoj 1433: [ZJOI2009]假期的宿舍【匈牙利算法】

    i能睡j床的连边(i,j),跑最大匹配或者最大流,然后看看人数能不能对上总数即可 #include<iostream> #include<cstdio> #include< ...

  4. 洛谷 2055 BZOJ 1433 [ZJOI2009]假期的宿舍

    [题解] 既然是一人对应一床,那么显然可以用二分图匹配来做.俩人认识的话,如果其中一个a是在校学生,另一个b不回家,b就可以向a的床连边(a,b当然也可以是同一个人). 然后如果最大匹配数大于等于需要 ...

  5. 1433: [ZJOI2009]假期的宿舍

    1433: [ZJOI2009]假期的宿舍 链接 分析: 直接网络流,看是否满足即可. S向每个有需要的人连边,有床的向T连边,认识的人之间互相连边. 代码: #include<cstdio&g ...

  6. bzoj1433 [ZJOI2009]假期的宿舍 最大流

    [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3429  Solved: 1459[Submit][Status][D ...

  7. 洛谷$P2055\ [ZJOI2009]$ 假期的宿舍 最大流

    正解:最大流 解题报告: 传送门$QwQ$ 这种一看就很网络流鸭,直接说咋建图趴. 考虑把在校的人拆成人和床.$S$连向所有不回家的人,所有床连向$T$,认识的人之间人向床连边,跑个最大流就成. $o ...

  8. 1433. [ZJOI2009]假期的宿舍【二分图】

    Description 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能 ...

  9. bzoj1433 [ZJOI2009]假期的宿舍(最大流)

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1717  Solved: 754[Submit][Stat ...

随机推荐

  1. 【译】第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  2. react 修改state某一属性值

    1.state // 筛选框相关数据 searchSelect: { term: { value: '学期', key: '', options: [] }, type_of_personnel: { ...

  3. JS设计模式——5.单体模式(用了这么久,竟全然不知!)

    单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借 ...

  4. 解决pl/sq可视化工具的中文乱码问题

    解决pl/sql中文乱码问题 问题:pl/sql的中文都显示为“?”,怎么能显示成中文呢? 1.  执行sql语句 select * from V$NLS_PARAMETERS NLS_LANGUAG ...

  5. Machine Learning系列--隐马尔可夫模型的三大问题及求解方法

    本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...

  6. html的loadrunner脚本2

    Action(){ char buf[1911]; //¶¨Òå×Ö·ûÊý×飬Ö÷ÒªÓÃÓÚдÈëXML±¨Îĵ½»º³åÇø char str_Body[4086]; //³Ð½Ó±¨Î ...

  7. SYN Flood攻击及防御方法 (转)

    原文连接:http://blog.csdn.net/bill_lee_sh_cn/article/details/6065704 一.为什么Syn Flood会造成危害      这要从操作系统的TC ...

  8. [ python ] 全局和局部作用域变量的引用

    全局与局部变量的引用 (a)locals(b)globals 这里还需要在补充2个关键字一起比较学习,关键字:(c)nonlocal(d)global locals 和 globals locals: ...

  9. beego学习笔记(4):开发文档阅读(4)

    beego.Run() 这个运行后, 1)解析配置文件,也就是conf目录下的. 2)判断是否开启session,并作相应的工作 3)执行用户的hookfunc. 4)是否编译模板 5)是否开启文档功 ...

  10. K&R《C语言》书中的一个Bug

    最近在重温K&R的C语言圣经,第二章中的练习题2-2引起了我的注意. 原题是: Write a loop equivalent to the for loop above without us ...