博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1325 ZOJ 1364 最小覆盖点集
阅读量:5362 次
发布时间:2019-06-15

本文共 990 字,大约阅读时间需要 3 分钟。

题意:有A,B两台机器, 机器A 有 n个模式(0, 1, 2....n-1),同样机器B有m个模式, 两个机器一开始的模式都为0,有k个作业(id,x,y) 表示作业编号id, 该作业必须在A机器在模式x下或者B机器在模式y下完成,问你至少要切换几次机器模式。

思路:很裸的最小覆盖点集,不熟悉概念的多看看蓝书吧,很容易证明 最小覆盖点集 == 最大匹配

 

#include 
#include
#include
using namespace std;vector
edge[113];int pre[113];bool vis[113];int n, m, q;bool dfs(int u) { for(int i = 0; i < (int)edge[u].size(); i++) { int v = edge[u][i]; if(vis[v]) continue; vis[v] = 1; if(pre[v] == -1 || dfs(pre[v])) { pre[v] = u; return 1; } } return 0;}int main() { int i; while( ~scanf("%d", &n) && n) { scanf("%d%d", &m, &q); int x, y; for(i = 0; i < n; i++) edge[i].clear(); while(q--) { scanf("%*d%d%d", &x, &y); if(!x || !y) continue; edge[x].push_back(y); } memset(pre, -1, sizeof(int)*m); int cnt = 0; for(i = 0; i < n; i++) { memset(vis, 0, sizeof(bool)*m); if(dfs(i)) cnt++; } printf("%d\n", cnt); } return 0;}

 

 

转载于:https://www.cnblogs.com/pangblog/p/3303799.html

你可能感兴趣的文章
懒加载树[tree]、点击已经加载完成的树[tree]节点,再次加载该节点下一级的所有子节点...
查看>>
[LeetCode]Unique Binary Search Trees
查看>>
CURL
查看>>
让python输出不自行换行的方法
查看>>
用servlet进行用户名和密码校验
查看>>
scala中伴生对象和伴生类
查看>>
格式布局小结
查看>>
plsql 存储过程 测试
查看>>
软件工程实践总结作业——个人作业
查看>>
NiftyNet 项目了解
查看>>
性能优化与使用Block实现数据回传(3)
查看>>
GMIS 2017 大会陈雨强演讲:机器学习模型,宽与深的大战
查看>>
关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章2
查看>>
Aspose.Cells Namespace
查看>>
(四)connection和session的区别
查看>>
React系列:无状态组件生成真实DOM结点
查看>>
软件工程课程总结
查看>>
UITableView(二)
查看>>
[Compose] 11. Use Task for Asynchronous Actions
查看>>
2018.10.16 NOIP模拟赛解题报告
查看>>