poj 1422
来源:互联网 发布:windows7网络连接红叉 编辑:程序博客网 时间:2024/06/09 20:45
题目意思是求最少数目的伞兵,可以走遍所有的街道。
二分图的最少边匹配,即找出最少的边可以覆盖所有的点。用匈牙利算法找出最大匹配,则最终结果为:ans = 图的顶点数 - 最大匹配。
#include<cstdio>#include<cstring>#include<iostream>#include<utility>#include<string>#include<set>#include<vector>#include<stack>#include<algorithm>#include<queue>#include<cstdlib>#include<map>#include<cmath>using namespace std;#define FOR(i,a,b) for(int i(a);i<(b);i++)#define REP(i,n) FOR(i,0,n)#define CL(a,b) memset(a,b,sizeof(a))const int M=200; const int N=120;//const __int64 inf=0x7fffffffffffffff;const int inf=1<<29;//const double inf=1e250;const double eps=1e-8;const double pi=acos(-1.0);const double sq2=sqrt(2.0);bool vis[M];bool mp[M][M];int result[M];int n,m;void init(){for(int i=0;i<=n+3;i++){result[i]=0;for(int j=0;j<=n+3;j++)mp[i][j]=0;}}bool find(int a){for(int i=1;i<=n;i++){if(mp[a][i] && !vis[i]){vis[i]=1;if(result[i]==0 || find(result[i])){result[i]=a;return true;}}}return false;}int main(){int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);init();while(m--){int a,b;scanf("%d%d",&a,&b);mp[a][b]=1;}int cnt=0;for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(find(i)) cnt++;}printf("%d\n",n-cnt);}return 0;}
- poj 1422
- poj 1422
- poj-1422
- POJ 1422 Air Raid
- poj 1422Air Raid
- poj 1422 Air Raid
- POJ 1422 Air Raid
- POJ-1422-Air Raid
- POJ 1422 Air Raid
- POJ 1422 Air Raid
- POJ 1422 Air Raid
- poj 1422 Air Raid
- poj 1422 Air Raid
- POJ 1422 Air Raid
- poj 1422(二分图)
- poj 1422 Air Raid
- POJ 1422 Air Raid
- poj 1422 Air Raid
- [转]Ultra Fractal教程系列46——动画功能的使用04——动画模式的实验
- 好乐买自动化运维实践
- Ubuntu 上使用Git
- filterpipelineprintproc.dll无法删除
- [转]Ultra Fractal教程系列47——动画功能的使用05——动画的拓展
- poj 1422
- [转]Ultra Fractal教程系列48——动画功能的使用06——时间轴工具的使用
- AspNet 路径问题
- 强壮的身体才能支撑强大的灵魂
- 刷机包制作过程
- hdu 1031 Design T-Shirt
- 提高网站打开速度的7大秘籍
- VC画线
- 2011年最强的免费PHP主机空间: 新浪SAE教程云计算平台攻略