• 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;
    }
    


  • 相关阅读:
    linux-who
    Linux开机禁用开启防火墙
    linux环境vnc安装
    NFS配置及开机自动挂载
    yum list失败
    镜像文件挂载及本地yum搭建
    weblogic在64位windows的设置
    linux操作系统语言更改
    Linux磁盘空间扩容(LVM)
    Nginx 拒接服务漏洞(CVE-2016-0747)整改
  • 原文地址:https://www.cnblogs.com/pangblog/p/3303799.html
Copyright © 2020-2023  润新知