「专题训练」Air Raid(HDU-1151)
题目
在一个城市里有\(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;
}
「专题训练」Air Raid(HDU-1151)的更多相关文章
- (匹配 最小路径覆盖)Air Raid --hdu --1151
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1151 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- J - Air Raid - hdu 1151(最小边覆盖)
题意:给一个有向无环图,求出来最少需要几个士兵可以遍历所有的边. 分析:有向无环图的最小边覆盖 = 点数 - 最大匹配数 为什么是这样的公式??可以思考一下,如果这N个点之间没有边,是不是应该有N个士 ...
- Air Raid HDU 1151
题意 给定n个路口 加上一些单向路 求遍历完所有路口需要多少人 人是空降的 哪里都可以作为起点 求 最小边覆盖 (用最少的边覆盖所有的点) 也叫最小路径覆盖(更形象) 也叫二分图的最大独立集 ...
- 「专题训练」Collecting Bugs(POJ-2096)
题意与分析 题意大致是这样的:给定一个\(n\times s\)的矩阵,每次可以随机的在这个矩阵内给一个格子染色(染过色的仍然可能被选中),问每一行和每一列都有格子被染色的次数的期望. 这题如果从概率 ...
- 「专题训练」游走(BZOJ-3143)
题意与分析 定义走到每条边的期望为\(e_i\),一开始的想法是给定一个\(\large\sum_{i=1}^n e_i a_i\),求一个a的排列使得这个和最小.问题在于这样等于没对题目作分析,而且 ...
- 「专题训练」Hard problem(Codeforces Round #367 Div. 2 C)
题意与分析 题意:给出\(n\)个字符串,可以反转任意串,反转每个串都有其对应的花费\(c_i\).经过操作后是否能满足字符串\(\forall i \in [1,n] \text{且} i \in ...
- 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)
题意与分析(Codeforces-431C) 题意是这样的:给出K-Tree--一个无限增长的树,它的每个结点都恰有\(K\)个孩子,每个节点到它\(K\)个孩子的\(K\)条边的权重各为\(1,2, ...
- 「专题训练」Boredom(CodeForces Round #260 Div.1 A)
题意(Codeforces-455A) 给你\(n\)个数,你每次可以选择删除去一个数\(x\)获得\(x\)分,但是所有为\(x+1\)和\(x-1\)的数都得删去.问最大获得分数. 分析 这是一条 ...
- 「专题训练」Machine Schedule(HDU-1150)
题意 在一个工厂,有两台机器\(A, B\)生产产品.\(A\)机器有\(n\)种工作模式(模式\(0\),模式\(1\)--模式\(n-1\)).\(B\)机器有\(m\)种工作模式(模式\(0\) ...
随机推荐
- python 闭包@装饰器
1.装饰器 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直 ...
- 有gridview汇出word和excel
private void Export(GridView _gv, string filetype, string FileName) { if (filetype == &quo ...
- HTML CSS STYLE USER Font Awesome Definition Content Attribute
在css样式表中写样式: 其中content使用图标类对应的字符编码如下
- [转]C#如何获取客户端IP地址
代码如下: /// <summary> /// 获取客户端IP地址 /// </summary> /// <returns></returns> ...
- mime中间件
mime中间件Demo,里面用到的有 1.path模块 //引入模块 var path=require('path'); 2.extname方法 //获取文件的扩展名 var extname=path ...
- Gradle Goodness: Changing Name of Default Build File
Gradle uses the name build.gradle as the default name for a build file. If we write our build code i ...
- scroll(),scrollTop(),scrollBy()无效问题的总结
· 使用的浏览器:Chrome(67.0.3396.87)/火狐(60.0.2)/IE(ie7和ie8),均为PC端. · 代码如下 表现结果: Chrome:只有第一次打开标签页面是有效的(在当前标 ...
- 简单的反编译class文件并重新编译的方法
在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...
- svn出现目标计算机积极拒绝无法链接
这是由于没有启动服务器端监控的原因,只需要执行以下代码即可 svnserve -d --listen-port 8000 -r /opt/svn
- .Net Core如何在任意位置获取配置文件的内容
前几天群里有人问,我想在程序里的任意位置读取appsetting.json里的配置,该怎么搞. 话不多说上源码 首先,要想读取配置文件我们要用到IConfiguration 接口,这个接口在Start ...