洛谷P2055 [ZJOI2009]假期的宿舍 题解
2024-10-20 05:49:29
题目链接:
https://www.luogu.org/problemnew/show/P2055
分析:
这道题比较简单,二分图的练习题(当然最大流同理)。
易得我们可以将人放在一侧,床放在一侧。
A与B认识就互相向对方的床连边流量为1
A不回家则S向A连流量为1的边。
A有床则向T连流量为1的边。
跑最大流即可。
最后判断是否等于不回家的人数。
然鹅因为作者较懒,于是写了二分图,大家可以两种方法都看看。
代码:
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int>v[20005];
int vis[20005],link[20005];
int t;
int a[55],b[55];
int find(int x)
{
for(int i=0;i<v[x].size();i++)
{
int p=v[x][i];
if(vis[p]!=t)
{
vis[p]=t;
if((!link[p])||find(link[p]))
{
link[p]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(link,0,sizeof(link));
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
v[i].clear();
}
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
if(b[i]==0&&a[i])
{
v[i].push_back(i);
}
}
int cnt=0;
for(int i=1;i<=n;i++)
{
if(!a[i]||(a[i]&&!b[i]))
cnt++;
}
int tmp;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&tmp);
if(tmp&&a[j])
{
v[i].push_back(j);
}
}
}
int tot=0;
for(int i=1;i<=n;i++)
{
if((a[i]&&!b[i])||!a[i])
{
t++;
if(find(i))
{
tot++;
}
//else
//break;
}
}
if(tot==cnt)
{
printf("^_^\n");
}
else
printf("T_T\n");
}
return 0;
}
最新文章
- ubuntu12.04中shell脚本无法使用source的原因及解决方法
- 使用jenkins 插件自动部署项目至tomcat
- SharePoint 2013 列表关于大数据的测试
- MainData仿Backbone Model式 数据模型记录器
- Spring3系列5-Bean的基本用法
- 剑指offer系列36----二叉搜索树的第k个节点
- 线程暴长~Quartz中创建Redis频繁后导致线程暴长
- Lua基础之Function
- HDOJ/HDU 1372 Knight Moves(经典BFS)
- PPTP-VPN日志功能,记录用户登录时间,流量统计,IP地址等信息
- ActiveMQ笔记——技术点汇总
- wifi扫描
- SQL语句整理2
- 人生苦短,我用Python(1)
- 如何通过setTimeout理解JS运行机制详解
- CentOS 7 Shell脚本编程第九讲 read命令简单介绍
- jquery和ajax和springmvc
- personal project
- js数值进制互转
- STL中实现 iterator trail 的编程技巧
热门文章
- C# 中使用OPenCV(Emgu)心得
- 阿里Android开发手册正式版一览
- .net core 利用Selenium和PhantomJS后台生成EChart图片
- QT5.1编译后的安装目录问题(硬路径问题)
- 开源项目 RethinkDB 关闭,创始人总结失败教训(市场定位错误)
- windows service 之访问权限(有NetworkService和LocalSystem的区分)
- Qt for Android之Hello World
- Spring之基于注解的注入
- Linux常用实用命令
- Hive 学习之路(八)—— Hive 数据查询详解