URAL 1109 Conference
来源:互联网 发布:java文件编译成class 编辑:程序博客网 时间:2024/05/16 01:03
打开题目网址:http://acm.timus.ru/problem.aspx?space=1&num=1109
题意:
为了参加即将召开的会议,A国派出M位代表,B国派出N位代表(M,N<=1000),A国代表的编号为1,2,3,...M,B国的代表编号为1,2,3,...N。在召开会议前,选出了K对代表,每代表必须一个是A,一个是B,如果A国代表i 和B国代表j之间构成了一对,则代表i和j之间可以进行谈判,每一个参加会议的代表至少被包含在某一对中,大会中心的CEO想在代表团的房间之间建立直接的电话联系,使得每个代表都至少跟对方代表对的一个代表建立联系,CEO想建立最少的电话联系,给出M,N,K和K对代表,找出需要的最小链接数目
其实就是一个变相的匈牙利算法,可以这样想,就是在每一个队员的房间了有一根线,如果最直接的就是N+M条电话线,很容易想如果是这样的话,肯定不是最少的连接方式,但是如果使用匈牙利求出最大的匹配数,然后用M+N的减掉匹配数其实就是最后结果了,这样想的话可以想成将A,B中的某两个人的电话线接起来了,每匹配一个就节省了一条,这样算法就很简单了
其实建模还是很重要的,只要模型建立起来了,再具体到算法就很简单了
//剖析visit数组????????????????#include <iostream>using namespace std;int map[1010][1010]; //邻阶矩阵,行和列全部都是点(注意和关联矩阵的区别,关联矩阵行是点,列是边)int match[1010];bool visit[1010];int m,n;int dfs(int i){ //判断以X集合中的节点i为起点的增广路径是否存在for(int j=1;j<=n;j++) //对B组的进行遍历看看是否满足可以匹配且没有被查找if(map[i][j]==1 && visit[j]==0){visit[j]=1;if( match[j]==0 || dfs( match[j] )){match[j]=i;return 1;}}return 0;}int main (){ int k,ans=0,i; scanf("%d%d%d",&m,&n,&k); memset(match,0,sizeof(match)); memset(map,0,sizeof(map));int temp1,temp2;while(k--){scanf("%d%d",&temp1,&temp2);map[temp1][temp2]=1;}//cout<<"*****************"<<endl; for(i=1;i<=m;i++) //注意是从1开始的,因为编号是从1开始的{memset(visit,0,sizeof(visit));if(dfs(i))ans++;}printf("%d",m+n-ans);return 0;}
0 0
- Ural-1109-Conference
- URAL 1109 Conference
- ural 1109 Conference (二分图匹配)
- 【图论】【二分图匹配】[Ural 1109]Conference
- Ural 1203. Scientific Conference
- ural 1203. Scientific Conference
- Ural 1203 Scientific Conference
- URAL 1203 Scientific Conference
- Ural 1203 Scientific Conference
- Ural 1109 Conference(匈牙利算法·转换)
- ural 1109. Conference 匈牙利算法
- URAL 1203 Scientific Conference (贪心)
- 1203. Scientific Conference 解题报告 URAL
- URAL 1203 Scientific Conference(贪心 || DP)
- URAL 1203Scientific Conference dp练习
- URAL 1203 Scientific Conference (贪心 + 优化)
- [贪心][DP][Ural 1203]Scientific Conference
- ural 1203. Scientific Conference(贪心or dp)
- 焦裕禄来兰考之前的日子
- Java语言的编译,链接,转载
- Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件
- QT Demo 之 text
- JVM探索之内存管理
- URAL 1109 Conference
- Linux 系统信息监控(CPU,DISC,Meminfo,流量和网速)
- 一切成功源于积累——20141107 美国非农5分钟k线直至收盘 各货币对表现
- 最值得学习阅读的10个C语言开源项目代码
- 大文件的读写方法
- Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程)
- eclipse固定任务栏,点击只显示一个图标的方法
- Ubuntu下安装wine详细介绍
- 标准C++ I/O库 迭代器让数据自由流动 V8