题目描述

学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 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. Redis内存使用优化与存储(转)

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...

  2. Callable和Future

    在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使 ...

  3. HashMap的实现

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

  4. Spark 1.4连接mysql诡异的问题及解决

    在spark-default.conf文件中明明配置了mysql的数据源连接 随后启动spark-shell 执行如下测试代码: import org.apache.spark.{SparkConte ...

  5. DBA_VMware虚拟机安装和简介(案例)

    2014-08-08 Created By BaoXinjian

  6. Report_客制化以PLSQL输出XLS标记实现Excel报表(案例)

    2015-02-12 Created By BaoXinjian

  7. POJ 4046 Sightseeing 枚举+最短路 好题

    有n个节点的m条无向边的图,节点编号为1~n 然后有点权和边权,给出q个询问,每一个询问给出2点u,v 输出u,v的最短距离 这里的最短距离规定为: u到v的路径的所有边权+u到v路径上最大的一个点权 ...

  8. 保存恢复临时信-Android 中使用onSaveInstanceState和onRestoreInstanceState

    在Activity中,有两个方法用于临时保存.恢复状态信息,这两个方法是: public void onSaveInstanceState(Bundle savedInstanceState); pu ...

  9. centos下安装mycat

    1.在某个临时文件夹下下载mycat(此处用的是1.4 RELEASE)wget https://raw.githubusercontent.com/MyCATApache/Mycat-downloa ...

  10. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址

    PHP $_SERVER['HTTP_REFERER'] 使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一页面的地址.一个例子如下: index.php(实际地 ...