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

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…

C——画图

描述 计算机画图也挺有趣的哈&#xff01;那我们就来用计算机画幅图吧。。。 输入 输入一个正整数N&#xff08;0< N<10&#xff09;&#xff0c;表示要输出的正方形的边上*的个数 输出 输出一个满足题意的正方形 样例输入 4 样例输出 **** **** **** **** …

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

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

html下拉框选中第二个,html通过点击第一个select改变第二关select的内容

地址联动select {width: 100px;padding: 5px;font-size:16px;}选择地址//定义省市的信息var provList [‘江苏‘,‘浙江‘,‘福建‘,‘湖南‘];var cityList [];cityList[0] [‘南京‘, ‘苏州‘, ‘宿迁‘, ‘扬州‘];cityList[1] [‘杭州‘, ‘温州‘, ‘宁波‘, ‘台州‘…

关于Asp.Net开发中导入外部JavaScript文件的问题

一直认为在html元素应用的时候&#xff0c;每个元素大都这样子(<hr />或者<script />)格式就对的&#xff0c;但今天就发现了&#xff0c;其实在不同的开发中是不一样的&#xff0c;这次遇到的就是导入外部Js文件的问题。之前我是如此写的&#xff1a; <script …

n个节点的二叉树n+1_使用C ++程序将链接列表中的最后N个节点附加到第一个

n个节点的二叉树n1Given a linked list and an integer n, append the last n elements of the LL to front. Assume given n will be smaller than length of LL. 给定一个链表和一个整数n&#xff0c;将LL的最后n个元素附加到前面。 假设给定的n将小于LL的长度。 Input form…

生活更多仓桑。

吃完房&#xff0c;到了房间&#xff0c;又把音乐开的最大声。听听一些呐感不平&#xff0c;可以发泄情感的歌。 现在听的是《浪人情歌》&#xff0c;不要再承受&#xff0c;要把你忘记。这些年来&#xff0c;自已为了她真的是付出了很多&#xff0c;但结果还是这样&#xf…

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

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

A+B Problem(V)

描述 做了AB Problem之后&#xff0c;Yougth感觉太简单了&#xff0c;于是他想让你求出两个数反转后相加的值。帮帮他吧 输入 有多组测试数据。每组包括两个数m和n&#xff0c;数据保证int范围&#xff0c;当m和n同时为0是表示输入结束。 输出 输出反转后相加的结果。 样…

Java中interrupted()和isInterrupted()之间的区别

Java中的interrupted()和isInterrupted() (interrupted() and isInterrupted() in Java) Here, we will see how isInterrupted() differs from interrupted() in Java? 在这里&#xff0c;我们将看到isInterrupted()与Java中的interrupted()有何不同&#xff1f; isInterrup…

DevExpress xtraTabbedMdiManager控件双击关闭MDI标签页

DevExpress .net组件包中&#xff0c;有一个组件是xtraTabbedMdiManager&#xff0c;可以将MDI窗口显示为TabControl的样式&#xff0c;可以说非常实用。可惜的是&#xff0c;关闭标签页&#xff08;即子MdiChild)不能通过双击来实现&#xff0c;这对于用惯了傲游等软件的朋友来…

计算机在线应用竖式,‎App Store 上的“竖式计算器”

加减乘除开根号竖式计算器大全。竖式计算是指在计算过程中列一道竖式计算&#xff0c;使计算简便。竖式计算贯穿整个的小学数学学习过程&#xff0c;是小学生必须掌握的必备技能。本竖式计算器支持加法竖式、减法竖式、乘法竖式、除法竖式、算术平方根竖式&#xff0c;完美支持…

线性表------栈

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

Linux mmap

原文地址&#xff1a;http://www.cnblogs.com/feisky/archive/2009/11/11/1600986.html Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: <unist…

无线网络覆盖

描述 我们的乐乐同学对于网络可算得上是情有独钟&#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…

荷兰国旗问题

描述 荷兰国旗有三横条块构成&#xff0c;自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列&#xff0c;要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。 …

线性表-----队列

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

爱情九十六课,位置决定爱情

恋人&#xff0c;就像两颗星&#xff0c;会按照彼此既定的轨道移动&#xff0c;决定爱情的&#xff0c;有时不是情感&#xff0c;而是位置。 无论你多努力&#xff0c;可能都无法超越你的位置。 候补行星 阿康的女朋友有很多男性朋友&#xff0c;他总觉得她和他们走得太近了&am…