zoukankan      html  css  js  c++  java
  • POJ 1325 ZOJ 1364 最小覆盖点集

    题意:有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
    ", cnt);
    
    	}
    	return 0;
    }
    


  • 相关阅读:
    2015 8月 做题记录
    Nim及SG函数
    CodeForces
    CF 546E(最大流
    CF 544E(状压
    树形DP
    HDU 4173(计算几何
    HDU 4081(最小生成树
    codeforeces 540E(树状数组
    Linux nginx安装
  • 原文地址:https://www.cnblogs.com/pangblog/p/3303799.html
Copyright © 2011-2022 走看看