poj-3041【二分图最小顶点覆盖】
来源:互联网 发布:上搜狐知天下 编辑:程序博客网 时间:2024/05/16 06:00
自从看了二分图之后,感觉好多题目的解题方法真的跟以往的思维方式不一样了。。。。这可能就是抽象思维吧。
这个题目的意思是在网格中有k个小行星,你的炮弹只能一次只能摧毁一行或者一列的小行星,让你用求出最小的炮弹数目来毁掉这些小行星。
这个题目抽象的地方在炮弹当做顶点把小行星当做边,把发射的光束当做顶点,然后建图。。。。这样建出图之后求这个二分图的最大匹配,因为对于二分图来说,
最小顶点覆盖=最大匹配,求出最大匹配数来就是对应的最小顶点覆盖数。
#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <string>#include <cmath>#define maxn 1010#define Max 0x3f3f3f3fusing namespace std;int n,m;vector<int>G[maxn];bool update[maxn];void add(int s,int t){ G[s].push_back(t); G[t].push_back(s);}int match[maxn];void Init(){ for (int i=1;i<=2*n;i++) { G[i].clear(); }}bool Dfs(int now){ update[now]=true; for (int i=0;i<G[now].size();i++) { int t=G[now][i]; if (match[t]==-1||(!update[match[t]]&&Dfs(match[t])))//?????????????? { match[now]=t; match[t]=now; return true; } } return false;}void Get(){ int res=0; memset(match,-1,sizeof(match)); for (int i=1;i<=2*n;i++) { if (match[i]==-1) { fill(update+1,update+2*n+1,false); if (Dfs(i)) { res++; } } } cout<<res<<endl;}int main(){ int a,b; while(scanf("%d %d",&n,&m)!=EOF) { Init(); while(m--) { scanf("%d %d",&a,&b); add(a,b+n); } Get(); } return 0;}
0 0
- poj-3041【二分图最小顶点覆盖】
- POJ 3041 (二分图匹配 最小顶点覆盖)
- poj 3041 Asteroids( 最小顶点覆盖,二分图)
- POJ 3041-Asteroids(二分图最小顶点覆盖)
- poj 3041 Asteroids 最小顶点覆盖 && 二分匹配
- poj 3041 Asteroids -二分匹配-最小顶点覆盖
- poj-3041-Asteroids【二分匹配&&最小顶点覆盖】
- poj 2226 二分图 最小顶点覆盖 “草泥马”
- poj 2226-二分图的最小顶点覆盖
- poj 1325 Machine Schedule---二分图求最小顶点覆盖
- POJ 3020Antenna Placement(二分图最小顶点覆盖)
- 【最小顶点覆盖】POJ 3041
- POJ - 3041 最小顶点覆盖
- poj 3041 二分图最小顶点覆盖 小行星删行或列
- poj3041_Asteroids_二分图最小顶点覆盖
- hdu 1150二分图最小顶点覆盖
- poj1325_二分图最小顶点覆盖集
- hud1150二分图最小顶点覆盖
- clion 拷贝可执行程序到本目录
- JQuery validate验证规则
- 2016/11/3 1002. 二叉树
- angularJs Demo1
- Difference between Override and Reintroduce in Delphi
- poj-3041【二分图最小顶点覆盖】
- AIDL简析使用
- 时间段或时间点重合判断
- Ubuntu 升级源repo改为阿里云源
- 第一次开通博客
- 线程与进程的区别
- Java ArrayList(AbstractList)之 modCount++ 此字段属性的英文注释翻译。
- ARM官方《CMSIS-RTOS教程》之创建线程Creating Threads
- Android底部导航栏的四种实现