题目描述

学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识。我们假设每个人只能睡和自己直接认识的人的床。那么一个解决方案就是 B 睡 A 的床而 C 睡 B 的床。而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识。我们已知一共有 n 个人,并且知道其中每个人是不是本校学生,也知道每个本校学生是否回家。问是否存在一个方案使得所有不回家的本校学生和来看他们的其他人都有地方住。

输入输出格式

输入格式:

第一行一个数 T 表示数据组数。接下来 T 组数据,每组数据第一行一个数n 表示涉及到的总人数。接下来一行 n 个数,第 i 个数表示第 i 个人是否是在校学生 (0 表示不是,1 表示是)。再接下来一行 n 个数,第 i 个数表示第 i 个人是否回家 (0 表示不会家,1 表示回家,注意如果第 i 个人不是在校学生,那么这个位置上的数是一个随机的数,你应该在读入以后忽略它)。接下来 n 行每行 n 个数,第 i 行第 j 个数表示 i 和 j 是否认识 (1 表示认识,0 表示不认识,第 i 行 i 个的值为 0,但是显然自己还是可以睡自己的床),认识的关系是相互的。

输出格式:

对于每组数据,如果存在一个方案则输出 “ ˆ_ˆ ”(不含引号) 否则输出“T_T”(不含引号)。(注意输出的都是半角字符,即三个符号的 ASCII 码分别为94,84,95)

 #include<iostream>
 #include<vector>
 #include<queue>
 #include<cstdio>
 #include<cstring>
 using namespace std;
 ;
 <<;
 struct Edge{
     int from,to,flow,cap;
 };
 struct Dinic{
     int vis[maxn],cur[maxn],d[maxn];
     vector<Edge> edges;
     vector<int> G[maxn];
     int s,t,n;
     void init(int n){
         this->n=n;
         edges.clear();
         ;i<=n;i++) G[i].clear();
     }
     void addEdge(int from,int to,int cap)
     {
         edges.push_back((Edge){,cap});
         G[);
         edges.push_back((Edge){to,,});
         G[to].push_back(edges.size()-);
     }
     int BFS()
     {
         memset(vis,,sizeof(vis));
         queue<int> Q;
         Q.push(s);
         vis[s]=;
         d[s]=;
         while(!Q.empty()){
             int x=Q.front();Q.pop();
             ;i<G[x].size();i++){
                 Edge& e=edges[G[x][i]];
                 if(!vis[e.to]&&e.cap>e.flow){
                     vis[e.to]=;
                     d[e.to]=d[x]+;
                     Q.push(e.to);
                 }
             }
         }
         return vis[t];
     }
     int DFS(int u,int a)
     {
         ) return a;
         ,f;
         for(int& i=cur[u];i<G[u].size();i++){
             Edge& e=edges[G[u][i]];
             &&(f=DFS(e.to,min(a,e.cap-e.flow)))>){
                 e.flow+=f;
                 edges[G[u][i]^].flow-=f;
                 flow+=f;
                 a-=f;
                 if(!a) break;
             }
         }
         return flow;
     }
     int MaxFlow(int ss,int tt)
     {
         ;
         s=ss,t=tt;
         while(BFS()){
             memset(cur,,sizeof(cur));
             ans+=DFS(s,inf);
         }
         return ans;
     }
 };
 Dinic solver;
 ],needBed;
 int main()
 {
     int T;scanf("%d",&T);
     while(T--){
         int x,k;scanf("%d",&x);
         solver.init(x*+);
         memset(atSchool,,;
         ;i<=x;i++){
             scanf("%d",&k);
             +x+i,+*x,),atSchool[i]=;
         }
         ;i<=x;i++){
             scanf("%d",&k);
             +i,+i+x,);
             ,+i,),++needBed;
         }
         ;i<=x;i++){
             ;j<=x;j++){
                 scanf("%d",&k);
                 +i,+x+j,);
             }
         }
         ,+*x)>=needBed) printf(,,);
         ,,);
     }
     ;
 }

ZJOI2009 假期的宿舍的更多相关文章

  1. BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2375  Solved: 1005[Submit][Sta ...

  2. 2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A ...

  3. bzoj1433: [ZJOI2009]假期的宿舍

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

  4. bzoj1433:[ZJOI2009]假期的宿舍

    明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...

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

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

  6. BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配

    BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...

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

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

  8. bzoj 1433: [ZJOI2009]假期的宿舍 -- 最大流

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MB Description Input Output Sample Input ...

  9. 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 ...

  10. 洛谷P2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A ...

随机推荐

  1. 使用eclipse和maven创建activiti项目基础配置

    项目组最近的项目使用到了activiti工作流,到处查找了一些资料后,初步完成任务.但是我所做的事只是在搭好的环境中调用接口和方法操作,因此自己尝试着也从搭建环境入手,以下是成功实现以后的记录. 实现 ...

  2. iphone dev 入门实例4:CoreData入门

    The iPhone Core Data Example Application The application developed in this chapter will take the for ...

  3. PLSQL_性能优化系列04_Oracle Optimizer优化器

    2014-09-25 Created By BaoXinjian

  4. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)

    Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...

  5. HDU 1213 How Many Tables(并查集,简单)

    题解:1 2,2 3,4 5,是朋友,所以可以坐一起,求最小的桌子数,那就是2个,因为1 2 3坐一桌,4 5坐一桌.简单的并查集应用,但注意题意是从1到n的,所以要减1. 代码: #include ...

  6. webview--网络超时

    package com.test.js2java; import java.util.Timer; import java.util.TimerTask; import android.app.Act ...

  7. python函数参数前面单星号(*)和双星号(**)的区别

    在python的函数中经常能看到输入的参数前面有一个或者两个星号:例如 def foo(param1, *param2): def bar(param1, **param2): 这两种用法其实都是用来 ...

  8. bootstrap-响应式工具和打印样式

    响应式工具: <div class="container"> <!-- 针对不同的宽度 展示或隐藏相关内容 visible-lg-block 显示 hidden- ...

  9. HTML5 规范

    1.内容类型(ContentType) HTML5扩展仍然为".html"或".htm",内容类型(ContentType)仍然为"text/html ...

  10. 算法库:Matlab与C++混合编程

    算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...