POJ 1325 ZOJ 1364 最小覆盖点集
2013-09-04 22:58
429 查看
题意:有A,B两台机器, 机器A 有 n个模式(0, 1, 2....n-1),同样机器B有m个模式, 两个机器一开始的模式都为0,有k个作业(id,x,y) 表示作业编号id, 该作业必须在A机器在模式x下或者B机器在模式y下完成,问你至少要切换几次机器模式。
思路:很裸的最小覆盖点集,不熟悉概念的多看看蓝书吧,很容易证明 最小覆盖点集 == 最大匹配
思路:很裸的最小覆盖点集,不熟悉概念的多看看蓝书吧,很容易证明 最小覆盖点集 == 最大匹配
#include <cstdio> #include <cstring> #include <vector> using namespace std; vector <int> 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; }
相关文章推荐
- POJ 1325 ZOJ 1364 最小覆盖点集
- POJ 1325 Machine Schedule(zoj 1364) 最小覆盖数
- POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
- ZOJ 1364 Machine Schedule (POJ 1325) (最小点覆盖数==最大匹配数)
- POJ 1325 Machine Schedule(zoj 1364) 最小覆盖数
- POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
- POJ 1325 Machine Schedule (二分图最小点集覆盖 匈牙利算法)
- POJ 1325 Machine Schedule(二分图最小点集覆盖)
- poj 1325 Machine Schedule(最小点集覆盖)
- POJ1325 Machine Schedule 【二分图最小顶点覆盖】
- poj 1325 | zoj 1364 Machine Schedule
- POJ 1422 && ZOJ 1525 --Air Raid【二分图 && 最小路径覆盖】
- poj 1325 Machine Schedule--最小点覆盖
- poj1325 二分图的最小覆盖
- POJ 1325 Machine Schedule(最大匹配数=最小点覆盖)
- poj1325 二分图的最小点覆盖
- poj1325最小顶点覆盖
- POJ 1325、ZOJ 1364、HDU 1150 Machine Schedule - from lanshui_Yang
- poj 2226 Muddy Fields(最小点集覆盖)
- POJ 1325 Machine Schedule 二分图 最小覆盖