题目描述

学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 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. makefile学习笔记(多目录嵌套调用、变量使用)

    http://blog.csdn.net/leexiang_han/article/details/9274229   学习了几天的makefile的嵌套调用编写也有一些心得,先声明,我也是初学者写文 ...

  2. cgic 写CGI程序

    CGIC是C语言CGI库函数,用于编写CGI程序 CGIC 主要完成以下功能: * 对数据进行语法分析 * 接收以 GET 和 PSOT 两种方式发送的数据 * 把 FORM 中的不同域连接成连续的串 ...

  3. SecureCRT上传、下载文件 使用sz与rz命令

    首先安装:apt-get install lrzsz SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是L ...

  4. Bellman-Ford & SPFA 算法——求解单源点最短路径问题

    Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题.Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好 ...

  5. Maven实战

      一.不要重复造轮子     极限编程(XP)是近些年在软件行业红的发紫的敏捷开发方法,强调拥抱变化.   Maven帮助XP团队实现一些核心价值:   1.简单.Maven暴露了一组一致.简洁的操 ...

  6. Synchronizing with Remote Repositories

    Synchronizing the states of local and remote repositories consists of pulling from and pushing to th ...

  7. PLSQL_闪回操作1_Flashback Query

    2014-07-02 Created By BaoXinjian

  8. contentProvider 内容提供者

    http://blog.csdn.net/woshixuye/article/details/8280879 实例代码当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定 ...

  9. 检测是否安装有sim卡

    ios7测试ok [CTSIMSupportGetSIMStatus() isEqualToString:kCTSIMSupportSIMStatusNotInserted]可以判断是否插入了sim卡 ...

  10. Linux文件夹文件创建、删除

    Linux删除文件夹命令 linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm ...