http://acm.hdu.edu.cn/showproblem.php?pid=2828 给定n个灯,m个开关,使得每栈灯亮,前提是控制这栈灯的开关的状态是其中一个.(题目应该都看得懂) 其实我想了挺久的,比赛的时候还想不出.但是直觉就告诉我是二分图匹配,虽然网上说什么精确覆盖. 不懂. 我的做法是: m个开关,则有2 * m种状态,以1号顶点表示1号灯是开得,1 + m号顶点表示1号灯是关的. 那么,进行一次二分匹配,模板需要改一下, 1.如果第i号灯需要第j个开关是ON的状态,但是第j个…
题意:求二分图的最大匹配数量 模版如下: //二分图匹配(匈牙利算法的DFS实现) //初始化:g[][]两边顶点的划分情况 //建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹配 //g没有边相连则初始化为0 //uN是匹配左边的顶点数,vN是匹配右边的顶点数 //调用:res=hungary();输出最大匹配数 //优点:适用于稠密图,DFS找增广路,实现简洁易于理解 //时间复杂度:O(VE) //******************* #include <cstdio&…
题目:http://poj.org/problem?id=3041 题意:在某个n*n的空间内,分布有一些小行星,某人在里面打炮,放一枪后某一行或某一列的行星就都没了,让求最少的打炮数. 然后把每行x或者每列y看成一个点,而障碍物(x,y)可以看做连接x和y的边.按照这种思路构图后. 问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,其实这就是最小点覆盖问题. 再利用二分图最大匹配的König定理:最小点覆盖数 = 最大匹配数 现在还是很多地方不会 最小点覆盖:假如选了一个点…
题目链接:https://cn.vjudge.net/problem/HDU-2819 Given an N*N matrix with each entry equal to 0 or 1. You can swap any two rows or any two columns. Can you find a way to make all the diagonal entries equal to 1? InputThere are several test cases in the in…
HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用最小的变动,使得全部部队效率之和最大.求最小变动的数目和变动后和变动前效率之差. 思路:对于怎样保证改变最小,没思路,看了别人题解,恍然大悟,表示想法很机智 试想,假设能让原来那些匹配边,比其它匹配出来总和同样的权值还大,对结果又不影响,那就简单了,这个看似不能做到,事实上是能够做到的 数字最多选出50个…
题目链接 给n个灯和m个开关, 每个灯可以由若干个开关控制, 每个开关也可以控制若干个灯, 问你能否找到一种开关的状态, 使得所有的灯都亮. 将灯作为列, 然后把每个开关拆成两行, 开是一行, 关是一行. 然后跑一下就可以. 输出路径的话, 就是用一个vis数组记录一下哪些行被访问过. #include<bits/stdc++.h> using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x…
题意: 有N个灯M个开关 每一个灯的ON和OFF状态都能控制一个灯是否亮 给出N行,代表对于每一个灯 哪些开关的哪个状态能够使得第i个灯亮 思路: 这里须要注意一个问题 假设开关1的ON 状态和开关2的ON状态能使得1号灯亮 那么开关1.2同一时候处于ON的时候 1号灯也是亮的.意思就是仅仅要有一个开关使得灯亮,灯就亮了. 简单的DLX 反复覆盖 行为每一个开关的两个状态2*m行,列为n个灯 在搜索的同一时候标记一下哪个开关被用过了 那么还有一个状态也不能用了 代码: #include"stdi…
HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配) Description You're giving a party in the garden of your villa by the sea. The party is a huge success, and everyone is here. It's a warm, sunny evening, and a soothing wind send…
RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner.考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站在下面看着吧.聪…
题目来源:HDU 2444 The Accomodation of Students 题意:n个人能否够分成2组 每组的人不能相互认识 就是二分图判定 能够分成2组 每组选一个2个人认识能够去一个双人间 最多能够有几组 思路:二分图判定+最大匹配 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxn = 550; int vis[maxn];…