POJ 1325 Machine Schedule(最大匹配数=最小点覆盖)
2015-10-25 19:34
417 查看
题目地址:点击打开链接
题意:给你2个机器A(A的模式有n种,标号从0到n-1)和B(B的模式有m种,标号从0到m-1),然后给你k个任务,(i,x,y)表示做完第i个任务可以用A机器的x模式和B机器的y模式
思路:很裸的二分图最小点覆盖,这道题需要注意点,A,B机器刚开始的模式都是0,所以在模式0处的不算,这个算是一个坑吧,看了别人的博客才知道
AC代码:
大神地址2:点击打开链接
题意:给你2个机器A(A的模式有n种,标号从0到n-1)和B(B的模式有m种,标号从0到m-1),然后给你k个任务,(i,x,y)表示做完第i个任务可以用A机器的x模式和B机器的y模式
思路:很裸的二分图最小点覆盖,这道题需要注意点,A,B机器刚开始的模式都是0,所以在模式0处的不算,这个算是一个坑吧,看了别人的博客才知道
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cstring> #include <climits> #include <cmath> #include <cctype> using namespace std; int map1[110][110]; int visit[110]; int link[110]; int n,m,k; bool dfs(int l) { int i; for(i=1; i<m; i++) { if(map1[l][i] && !visit[i]) { visit[i] = 1; if(link[i] == -1 || dfs(link[i])) { link[i] = l; return true; } } } return false; } int main() { int i; while(scanf("%d",&n) && n) { scanf("%d%d",&m,&k); memset(map1,0,sizeof(map1)); memset(link,-1,sizeof(link));//不能用0表示link的有无,因为有可能link的值就是0 int a,x,y; for(i=1; i<=k; i++) { scanf("%d%d%d",&a,&x,&y); map1[x][y] = 1; } int sum = 0; for(i=1; i<n; i++) { memset(visit,0,sizeof(visit)); if(dfs(i)) sum++; } printf("%d\n",sum); } return 0; }大神地址1:点击打开链接
大神地址2:点击打开链接
相关文章推荐
- 常用的数据结构
- 迷宫最终版本(暂时的)
- 【codevs4093】EZ的间谍网络 tarjan
- 神奇的Bank系统之旅哦
- A - Restaurant
- java
- scanf()函数的用法
- DOM创建和删除节点
- 周赛 2 【拓展GCD&&欧几里得数】
- Windows下安装Code::Blocks 13.12进行C/C++开发
- uft代码自定义测试点
- java
- java面试题
- 数据结构时间复杂度计算
- git常用命令-Git学习笔记
- GET和POST的区别
- 学习笔记之数据结构与算法(三)
- 老板很有骨气:越是抱怨,越不给你涨工资,看你怎么样(转)
- 信息安全设计基础第七周学习总结
- CSS: body{font-size: 62.5%;}为什么???