二分图匹配----匈牙利算法之二

poj 1469 COURSES
//题意:现在有p门课程和n个学生,现在需要有由p个学生组成的组织,该组织满足每个学生代表一门课程以及每门课程只能由一个学生代表,
//现给出每门课程都有哪些学生可以参加,要求判断是否存在满足题意所需要的组织.
//求解二分图的最大匹配数,如果与p相等就输出"YES",否则输出"NO".
ContractedBlock.gifExpandedBlockStart.gifpoj 1469 COURSES
#include<iostream>        //二分图的最大匹配
#include<cstring>
using namespace std;
int p,n;
int result[301]; //result记录V2中的点匹配的点的编号
int edge[101][301],vis[301]; //vis记录V2中的每个点是否被搜索过
bool find(int a)
{
for(int i=1;i<=n;++i)
{
if(edge[a][i]==1&&vis[i]==0) //如果节点i与a相邻并且未被查找过
{
vis[i]
=1; //标记i为已查找过
if( result[i]==0 || find(result[i])==true ) //如果i未在前一个匹配M中或者 i在匹配M中,但是从与i相邻的节点出发可以有增广路
{
result[i]
=a; //记录查找成功记录
return true; //返回查找成功
}
}
}
return false;
}
int main()
{
int cases;
scanf(
"%d",&cases);
while(cases--)
{
memset(edge,
0,sizeof(edge));
memset(result,
0,sizeof(result));
scanf(
"%d%d",&p,&n);
int m,t;
for(int i=1;i<=p;++i)
{
scanf(
"%d",&m);
while(m--)
{
scanf(
"%d",&t);
edge[i][t]
=1;
}
}
int ans=0;
for(int i=1;i<=p;++i)
{
memset(vis,
0,sizeof(vis)); //清空上次搜索时的标记
if(find(i)==true) //从节点i尝试扩展
ans++;
}
if(ans==p)
printf(
"YES\n");
else
printf(
"NO\n");
}
return 0;
}

  

转载于:https://www.cnblogs.com/mjc467621163/archive/2011/07/19/2111046.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FileSystemObject简介及应用

提示:刚一开始看到有这样的功能&#xff0c;我也受骗了&#xff0c;以为真的可以通过浏览器在访问者的硬盘上创建文件&#xff0c;因为我开始试了一下真的可以&#xff0c;不信你把下面这段代码COPY到一个HTML文件当中再运行一下&#xff01; <script language"JavaScr…

线性表----循环链表和静态链表

1、循环链表 1.1 循环单链表 循环单链表和单链表的区别在于&#xff0c;表中最后一个结点指针不在是null&#xff0c;而是头指针&#xff0c;从而使整个链表形成一个环 此时判断单链表是否为空&#xff0c;条件就是头结点的指针是否等于头指针此时单链表相当于一个环&#…

利用kali的msf提取汇编机器码(shellcode)

对于提取小段汇编的机器码&#xff0c;kali的msf提取汇编机器码非常方便 比如提取下面小段的汇编机器码 push 5 ;5SW_SHOWpush eaxmov eax,0x755bdab0call eax首先输入 msf-nasm_shell //注意msf和-之间没有空格然后依次输入命令 将上面内容复制到一个文本编辑器里&#x…

线性表------栈

1、基本概念 栈&#xff1a;只允许在一端插入或删除操作的线性表栈底&#xff08;buttom&#xff09;&#xff1a;固定的&#xff0c;不允许进行插入和删除操作的另一端栈顶&#xff08;top&#xff09;&#xff1a;线性表允许插入和删除的一段 栈是线性表&#xff0c;只不过受…

无线网络覆盖

描述 我们的乐乐同学对于网络可算得上是情有独钟&#xff0c;他有一个计划&#xff0c;那就是用无线网覆盖郑州大学。 现在学校给了他一个机会&#xff0c;因此他要购买很多的无线路由。现在他正在部署某条大道的网络&#xff0c;而学校只允许把他的无线路由器放在路的正中间…

旧计算机 云桌面,该不该利用旧PC机改造成云桌面虚拟化模式呢?

原标题&#xff1a;该不该利用旧PC机改造成云桌面虚拟化模式呢&#xff1f;由于传统PC电脑办公模式有数据安全隐患、维护成本高、占用空间及耗电量高&#xff0c;噪音大&#xff0c;使用寿命低等弊端正在逐步退出办公领域&#xff0c;越来越多的企业选择桌面虚拟化办公模式。那…

nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js

nodemailer 附件In the previous article, "How to send emails using Nodemailer?", we discussed how to send simple emails using Nodemailer in Node.js? Here, we are going to learn further – How to send emails with attachments using Nodemailer in N…

线性表-----队列

1、基本概念 队列是只允许在一端进行插入&#xff0c;而在另一段进行删除的线性表队头&#xff1a;允许删除的一端队尾&#xff1a;允许插入的一端空队列&#xff1a;没有任何元素的空表 队列是操作受限的线性表&#xff0c;因此不是任何对线性表的操作都可以作为队列的操作…

如何在React JS组件和React JS App中添加CSS样式?

In this tutorial, we will only work with CSS styles. Please ensure you have basic knowledge of HTML, CSS, React JS and Node.Js. 在本教程中&#xff0c;我们将仅使用CSS样式 。 请确保您具有HTML&#xff0c;CSS&#xff0c;React JS和Node.Js的基础知识。 In our re…

用计算机怎么打出狂浪字谱,狂浪歌曲简谱

狂浪歌曲简谱&#xff1a;66671112&#xff5c;2223176&#xff5c;一波一波接踵而来&#xff0c;大风带着我摇摆&#xff0c;22222112&#xff5c;322143&#xff0d;&#xff5c;66671112&#xff5c;梦在燃烧心在澎拜&#xff0c;不用徘徊。大摇大摆漂在人海&#xff0c;222…

C和汇编---while反汇编

环境&#xff1a;VC C程序&#xff1a; #include "stdio.h"int main() {int i1,sum0;while(i<100){sumi;i;}printf("%d\n",sum);return 0; }用while计算1到100的值&#xff0c;功能很简单&#xff0c;让我们看看反汇编 首先在main函数的入口&#xff0…

IPv6技术未来发展趋势

前言 人们对于采用综合技术&#xff0c;将数据、话音和视频等业务“一网打尽”梦想的追求从来都没有停止过。从上世纪80年代的综合业务数字网(ISDN)技术&#xff0c;到90年代的基于异步传输模式(ATM)的宽带ISDN&#xff0c;直到现在的IPMPLS(多协议标记交换)技术等。在这一过程…

栈的应用

1、括号匹配 如果是扫描到左括号&#xff0c;则入栈如果是扫描到右括号&#xff0c;则检查现在的栈顶元素&#xff0c;如果括号匹配&#xff0c;则栈顶元素出栈结束时&#xff0c;如果栈内没有元素&#xff0c;则括号匹配 bool Check(char *str){stack s;InitStack(s);int le…

Silverlight 布局控件

1.1. Canvas 在Canvas 布局中&#xff0c;控件使用Canvas.Top和Canvas.Left来定位内容: View Code 1 <Canvas x:Name"LayoutRoot" Background"White">2 <Button Name"SampleButton"3 Content"Sample Bu…

C和汇编-----for循环

环境&#xff1a;VC for循环有三个表达式&#xff0c;第一个表达式是初始化&#xff0c;在for循环之前执行一次&#xff0c;后面就不执行了&#xff0c;第二个是循环条件&#xff0c;在执行循环体之前求值&#xff0c;如果为真&#xff0c;执行循环体&#xff0c;如果为假&…

韩国的计算机科学家,韩国科学技术院用普通相机为AR/VR复刻真实世界物理对象...

只需一个包含闪光灯的相机/摄像头(映维网 2018年12月10日)为虚拟环境捕捉和复刻逼真的现实世界对象十分复杂&#xff0c;而且耗时。所以&#xff0c;从移动设备和数码相机&#xff0c;你能想象只通过一个包含内置闪光灯的传统相机来简化这个任务吗&#xff1f;一支全球化的计算…

C和汇编混合编程---do while

环境&#xff1a;VC do while 会先执行do里面的循环体&#xff0c;执行完去执行while的条件判断&#xff0c;如果为真&#xff0c;继续执行do里面的循环体&#xff0c;如果为假&#xff0c;则结束循环 C程序&#xff1a; #include "stdio.h" int main() {int i1,su…

林子大了,什么鸟都有----.NET运用String的十八层境界

林子大了&#xff0c;什么鸟都有----.NET运用String的十八层境界 在上一文中&#xff0c;提到了一句相当常见但十分荒谬的代码&#xff1a;Request.QueryString["id"].ToString()。突然涌起一个想法&#xff0c;为什么不总结一下不同层次.Net开发者如何运用string的呢…

计算机机场基础知识,全国机场频率_电脑基础知识_IT计算机_专业资料

全国机场频率_电脑基础知识_IT计算机_专业资料 (13页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分机场频率2009-11-28 15:29:251分类&#xff1a;默认分类I举报I字匕订阅中国主要机场管制…

c和汇编---函数

环境&#xff1a;VC 作用&#xff1a; 函数是完成特定任务的独立程序代码单元 1、创建和使用函数 函数原型&#xff1a;声明函数是什么类型&#xff0c;指明函数的返回值和函数接收的参数类型&#xff0c;函数和变量一样&#xff0c;有多种类型&#xff0c;任何程序在使用函…