题目

在一个城市里有\(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;
}

最新文章

  1. golang笔记——struct
  2. HTML5 离线缓存管理库
  3. 批处理——服务器的web文件备份
  4. 3.2 一般的哈尔空间Vj
  5. yum 介绍
  6. 一个数如果恰好等于它的因子之和,这个数就称为 &quot;完数 &quot;。例如6=1+2+3.编程&#160;&#160;&#160;&#160; 找出1000以内的所有完数。
  7. Spring配置项&lt;context:annotation-config/&gt;说明
  8. BufferedInputStream实现原理分析
  9. Linux-C语言中gettimeofday()函数的使用方法(转载)
  10. TCP/IP(七)之玩转HTTP协议
  11. jsp页面制作弹出框
  12. c或c++利用scanf无限输入并进行简单操作如比大小等
  13. Mybatis3.2不支持Ant通配符TypeAliasesPackage扫描的解决方案
  14. 写一个可插入自定义标签的 Textarea 组件
  15. k-近邻算法-手写识别系统
  16. Redis 分布式锁的实现
  17. Unity Ulua1.03优化记录
  18. Python知识
  19. CSS的力量:用一个DIV画图
  20. Xcode: Show Bounds Rectangles for UIView in Interface Builder

热门文章

  1. Entity Framework——读写分离
  2. ASP.NET Web API编程——使用自签名SSL证书
  3. MVC导航菜单高亮显示实现思路
  4. Gradle Goodness: Task Output Annotations Create Directory Automatically
  5. Flex布局(一)flex-direction
  6. mysql事务隔离
  7. 【转载】RETE算法研究
  8. jQuery入门简单实现反选与全选
  9. OS--lab0+lab1+lab4+lab5+lab6+lab7
  10. MFC+ODBC+SQL Server+Visual C++