「专题训练」Air Raid(HDU-1151)
2024-08-28 16:25:38
题目
在一个城市里有\(n\)个地点和\(k\)条道路,道路是无环的(也就是说一定可以二分染色——回路长度为偶数0),现在伞兵需要去n个地点视察,只能沿着路的方向走,问最少需要多少伞兵。
分析
这是什么问题?找出最少的边,访问所有的点——二分图的的最小路径覆盖。
那么对于一个最大匹配,它能覆盖(2最大匹配)个点,剩下的点都需要单独一条边覆盖,从而设匹配数为\(k\),覆盖数为\(p\),有$$n-2k+k=p$$,也就是\(n-k=p\)。
代码
#include <cstring>
#include <algorithm>
#include <vector>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define MS(x,y) memset(x,y,sizeof(x))
using namespace std;
bool mat[125][125],vis[125];
int n,m;
int link[125];
bool dfs(int x)
{
rep(i,1,n)
{
if(mat[x][i] && !vis[i])
{
vis[i]=true;
if(link[i]==-1 || dfs(link[i]))
{
link[i]=x;
return true;
}
}
}
return false;
}
int hungary()
{
int ans=0;
rep(i,1,n)
{
ZERO(vis);
if(dfs(i)) ans++;
}
return ans;
}
int main()
{
int T; scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
ZERO(mat);
ZERO(vis);
MS(link,-1);
rep(i,1,m)
{
int a,b;
scanf("%d%d", &a, &b);
if(a && b) mat[a][b]=1;
}
printf("%d\n", n-hungary());
}
return 0;
}
最新文章
- golang笔记——struct
- HTML5 离线缓存管理库
- 批处理——服务器的web文件备份
- 3.2 一般的哈尔空间Vj
- yum 介绍
- 一个数如果恰好等于它的因子之和,这个数就称为 ";完数 ";。例如6=1+2+3.编程&#160;&#160;&#160;&#160; 找出1000以内的所有完数。
- Spring配置项<;context:annotation-config/>;说明
- BufferedInputStream实现原理分析
- Linux-C语言中gettimeofday()函数的使用方法(转载)
- TCP/IP(七)之玩转HTTP协议
- jsp页面制作弹出框
- c或c++利用scanf无限输入并进行简单操作如比大小等
- Mybatis3.2不支持Ant通配符TypeAliasesPackage扫描的解决方案
- 写一个可插入自定义标签的 Textarea 组件
- k-近邻算法-手写识别系统
- Redis 分布式锁的实现
- Unity Ulua1.03优化记录
- Python知识
- CSS的力量:用一个DIV画图
- Xcode: Show Bounds Rectangles for UIView in Interface Builder
热门文章
- Entity Framework——读写分离
- ASP.NET Web API编程——使用自签名SSL证书
- MVC导航菜单高亮显示实现思路
- Gradle Goodness: Task Output Annotations Create Directory Automatically
- Flex布局(一)flex-direction
- mysql事务隔离
- 【转载】RETE算法研究
- jQuery入门简单实现反选与全选
- OS--lab0+lab1+lab4+lab5+lab6+lab7
- MFC+ODBC+SQL Server+Visual C++