hdu 1151 Air Raid
来源:互联网 发布:python开发实战1200例 编辑:程序博客网 时间:2024/06/08 18:28
Description
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
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
Sample Input
2433 41 32 3331 31 22 3
Sample Output
21
二分图:
最小点覆盖数=最大匹配数
增广路:
若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。
由增广路的定义可以推出下述三个结论:
1、P的路径个数必定为奇数,第一条边和最后一条边都不属于M。
2、将M和P进行取反操作可以得到一个更大的匹配M’
(反操作:把P中的 匹配边 与 非匹配边 互换)
3、M为G的最大匹配当且仅当不存在M的增广路径P
本题:
最小路径覆盖=图的顶点数-最大匹配数
二分图:
最小点覆盖数=最大匹配数
增广路:
若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。
由增广路的定义可以推出下述三个结论:
1、P的路径个数必定为奇数,第一条边和最后一条边都不属于M。
2、将M和P进行取反操作可以得到一个更大的匹配M’
(反操作:把P中的 匹配边 与 非匹配边 互换)
3、M为G的最大匹配当且仅当不存在M的增广路径P
本题:
最小路径覆盖=图的顶点数-最大匹配数
题目大意:
在一个城镇,有m个路口,和n条路,这些路都是单向的,而且路不会形成环,现在要弄一些伞兵去巡查这个城镇,
ACcode:
#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>using namespace std;bool map[505][505];bool vis[505];int link[505];int m,n,gil,boy;bool DFS(int x){ for(int y=1; y<=n; ++y) { if(!vis[y] && map[x][y]) { vis[y]=1; if(!link[y] || DFS(link[y])) { link[y]=x; return 1; } } } return 0;}int main(){ int i,x,y,T; cin>>T; while(T--) { scanf("%d%d",&n,&m); memset(map,0,sizeof(map)); memset(link,0,sizeof(link)); int sum=0; for(i=0; i<m; ++i) { scanf("%d%d",&x,&y); map[x][y]=1; } for(x=1; x<=n; ++x) { memset(vis,0,sizeof(vis)); if(DFS(x)) ++sum; } printf("%d\n",n-sum); } return 0;}
二分图:
最小点覆盖数=最大匹配数
增广路:
若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。
由增广路的定义可以推出下述三个结论:
1、P的路径个数必定为奇数,第一条边和最后一条边都不属于M。
2、将M和P进行取反操作可以得到一个更大的匹配M’
(反操作:把P中的 匹配边 与 非匹配边 互换)
3、M为G的最大匹配当且仅当不存在M的增广路径P
本题:
最小路径覆盖=图的顶点数-最大匹配数
- hdu 1151 Air Raid
- hdu 1151 Air Raid
- HDU 1151 Air Raid
- HDU 1151Air Raid
- Hdu 1151 - Air Raid
- hdu 1151 Air Raid
- hdu 1151 Air Raid
- hdu 1151 Air Raid
- hdu 1151 Air Raid
- HDU 1151 Air Raid
- HDU 1151 Air Raid
- hdu 1151 Air Raid
- hdu 1151 Air Raid
- hdu/hdoj 1151 Air Raid
- hdu 1151 Air Raid 匹配
- hdu acm 1151 Air Raid
- POJ 1422/ HDU 1151 Air Raid
- hdu 1151 Air Raid (二分匹配)
- CSDN网站系统升级公告
- PinnedSectionListView实现手机通讯录功能
- 移动端实现摇一摇并振动
- Android手机屏幕适配
- Python基础——zip
- hdu 1151 Air Raid
- swift 快速奔跑的兔几 本节的内容是:iOS上基于文档的应用程序
- Android合并文件的三种方式
- Ansj添加停用词表
- Boost.program_options简述
- 你了解 Assembly.Load 吗?
- redis memcache 性能比较
- C++设计模式[十八]观察者模式
- easyui-tooltip 提示框