题目:

Air Raid

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 124 Accepted Submission(s): 102
 
Problem Description
Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets you can never reach the same intersection i.e. the town's streets form no cycles.

With these assumptions your task is to write a program that finds the minimum number of paratroopers that can descend on the town and visit all the intersections of this town in such a way that more than one paratrooper visits no intersection. Each paratrooper lands at an intersection and can visit other intersections following the town streets. There are no restrictions about the starting intersection for each paratrooper.

Input
Your program should read sets of data. The first line of the input file contains the number of the data sets. Each data set specifies the structure of a town and has the format:

no_of_intersections
no_of_streets
S1 E1
S2 E2
......
Sno_of_streets Eno_of_streets

The first line of each data set contains a positive integer no_of_intersections (greater than 0 and less or equal to 120), which is the number of intersections in the town. The second line contains a positive integer no_of_streets, which is the number of streets in the town. The next no_of_streets lines, one for each street in the town, are randomly ordered and represent the town's streets. The line corresponding to street k (k <= no_of_streets) consists of two positive integers, separated by one blank: Sk (1 <= Sk <= no_of_intersections) - the number of the intersection that is the start of the street, and Ek (1 <= Ek <= no_of_intersections) - the number of the intersection that is the end of the street. Intersections are represented by integers from 1 to no_of_intersections.

There are no blank lines between consecutive sets of data. Input data are correct.

Output

            The result of the program is on standard output. For each input data set the program prints on a single line, starting from the beginning of the line, one integer: the minimum number of paratroopers required to visit all the intersections in the town.
Sample Input
2
4
3
3 4
1 3
2 3
3
3
1 3
1 2
2 3

Sample Output
2
1

 
Source
Asia 2002, Dhaka (Bengal)
Recommend
Ignatius.L

题目大意:

一个城市里有n个十字路口。m条街道,要在十字路口上降落伞兵。伞兵可以搜索到降落的那个路口或者沿着此路口所连接的街道搜索到其它路口。使伞兵能找到全部路口,求此时的最小值,即降落伞兵的最小数量

题目分析:

求有向无环图的最小路径覆盖。

有向无环图的最小路径覆盖 = 节点数 - 最大匹配数。

1、下面时须要用到的一些知识点:

顶点覆盖:

在顶点集合中。选取一部分顶点,这些顶点可以把全部的边都覆盖了。这些点就是顶点覆盖集

最小顶点覆盖:

在全部的顶点覆盖集中,顶点数最小的那个叫最小顶点集合。

独立集:

在全部的顶点中选取一些顶点,这些顶点两两之间没有连线,这些点就叫独立集

最大独立集:

在左右的独立集中,顶点数最多的那个集合

路径覆盖:

在图中找一些路径,这些路径覆盖图中全部的顶点。每一个顶点都仅仅与一条路径相关联。

最小路径覆盖:

在全部的路径覆盖中,路径个数最小的就是最小路径覆盖了。

2、当中至于第一个案例中为什么最小路径覆盖的答案是2,查看一下:http://blog.csdn.net/hjd_love_zzt/article/details/44243725

就知道了。

代码例如以下:

/** c.cpp**  Created on: 2015年3月13日*      Author: Administrator*/#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int maxn = 121;int map[maxn][maxn];
int useif[maxn];
int link[maxn];int n;bool can(int t){int i;for(i = 1 ; i <= n ; ++i){if(useif[i] == false && map[t][i] == true){useif[i] = true;if(link[i] == -1 || can(link[i])){link[i] = t;return true;}}}return false;
}int max_match(){int num = 0;int i;for(i = 1 ; i <= n ; ++i){//须要注意的是,本题中结点序号是从1開始的,而不是从0開始的.所以这里要写成1開始,否则果断的WAmemset(useif,false,sizeof(useif));if(can(i) == true){num++;}}return num;
}int main(){int t;scanf("%d",&t);while(t--){memset(map,false,sizeof(map));memset(link,-1,sizeof(link));int m;scanf("%d",&n);scanf("%d",&m);int i;for(i = 0 ; i < m ; ++i){int a,b;scanf("%d %d",&a,&b);map[a][b] = true;}//有向无环图的最小路径覆盖 = 节点数 - 最大匹配数printf("%d\n",n- max_match());}return 0;
}

(hdu step 6.3.3)Air Raid(最小路径覆盖:求用最少边把全部的顶点都覆盖)相关推荐

  1. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要在不同的地方空降伞兵,保证所有伞兵沿着道路可以走完所有城市,求出最少伞兵的数量 题目分析:我们的目的是要用最少的路径覆盖所有顶点,换句话说就是二分 ...

  2. POJ 1422 Air Raid (最小路径覆盖)

    题意 给定一个有向图,在这个图上的某些点上放伞兵,可以使伞兵可以走到图上所有的点.且每个点只被一个伞兵走一次.问至少放多少伞兵. 思路 裸的最小路径覆盖. °最小路径覆盖 [路径覆盖]在一个有向图G( ...

  3. hdu 4160 (Dolls)二分图的最小路径覆盖

    关于二分图,让人很头疼啊!归结为一句话,就是看不出来题目是二分图的问题. 也许是对二分图不太熟悉吧!需要多练习! 题目大意:给出n个箱子,每个箱子的参数为长,宽,高:(a,b,c):当且仅当箱子s1, ...

  4. Gym - 100917F Find the Length-用最小路径树求最小环

    https://codeforces.com/gym/100917/problem/F 题目大意:就给你一个无向图,求出所有点属于的最小环大小. 思路:我们给每一个点用dji求出最小路径树,然后对于一 ...

  5. 【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题

    加qq1126137994 一起学习更多技术!!! 有一个矩阵map,它每个格子有一个权值.从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有 ...

  6. HDU 1151 Air Raid

    DAG的最小路径覆盖 #include<stdio.h> #include<iostream> #include<algorithm> #include<st ...

  7. HDU1151 Air Raid

    原题传送:http://acm.hdu.edu.cn/showproblem.php?pid=1151 DAG图的最小路径覆盖数 = 节点数(n)- 最大匹配数(m)   所以,关键是求二分图的最大匹 ...

  8. 随便听听 Day 2:US ‘smart bombs‘ hit an Iraqi air raid shelter.

    随便听听 Day 2:US 'smart bombs' hit an Iraqi air raid shelter. sortie 架次(军用的飞机或者船只) civil defence 民防 dra ...

  9. 有向图最小路径覆盖方法浅析、证明 //hdu 3861

    路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...

最新文章

  1. Linux重定向和管道符使用避坑指南
  2. php数组修改键值,php数组中子数组如何修改键值
  3. 【ORACLE 高可用】 ORACLE STREAM 基于单表的流复制 配置 案例
  4. 虚拟机安装Solaris10
  5. scss、sass 和 css 的区别
  6. 解决迭代器调用next方法时报错:StopIteration
  7. 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
  8. 单线程和多线程的区别
  9. 原价399,限时1元!7天人工智能入门训练营:带你从0掌握机器学习算法!
  10. python判断字符串相等_“python”中怎么判断字符串相等?
  11. cmd运行sql文件
  12. java 浏览器脚本_各种浏览器开启JavaScript脚本方法
  13. 无线通信基础知识10:数字通信之双工技术
  14. Linux cJSON
  15. 基于java的汽车租赁管理系统的设计与实现(含源文件)
  16. The endpoint reference (EPR) for the Operation not found 可能问题以及解决办法
  17. FS4054单节锂电池充电管理芯片,IC电路图
  18. codeforces每日5题(均1500)-第八天
  19. 笔记本联想(Lenovo)G40-70M加装内存和SSD固态硬盘
  20. Android指定物理按键唤醒屏幕

热门文章

  1. 2021,我的年终总结......
  2. android html 换行_android TextView怎么设置个别字体颜色并换行?
  3. python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用
  4. linux UID的长度,linux下文件数、目录数、文件名长度的各种限制
  5. java web排序商城_JavaWeb网上商城的反思
  6. sparse non-rigid registration of 3d shapes
  7. C++空类中的默认函数
  8. 基于密集卷积神经网络的多类植物病害检测与分类
  9. oracle数据库集群采用的是形式,铁道部采用Oracle集群数据库进行TMIS系统“三级建库”...
  10. BERT+CRF互联网金融新实体发现