二分图&2-sat
YYyyCCCcccBb
觉得为时已晚的时候,恰恰是最早的时候。
展开
-
HDU5971 Wrestling Match(二分图染色)
题意: 给出比赛的人的标号, 以及x个好人y个坏人。询问是否能判断他是一个好人或者坏人。 给出的关系是否不存在矛盾,并且没有既是好人又是坏人。 思路: 训练的时候这题理解错了,一直没过。 补题发现可以是多个连通块,就是说可以分为m堆,只要每个堆里不存在矛盾关系,且每个人都出现过就可以。 #include #include #include using namespace std原创 2017-05-02 11:38:25 · 593 阅读 · 0 评论 -
E - Elementary Math 2015-2016 Northwestern European Regional Contest (NWERC 2015)
题意: 给出+-*三种运算以及a xxx b两个数字。要求对于每个a.b执行任意一种预算,且结果均不等 思路: 构造二分图,寻找最大匹配。并且记录匹配的方式。对于每个a-b a*b a+b都构造一个点,连边 #include #include #include #include #include #include #include #include using namesp原创 2017-10-09 12:18:55 · 266 阅读 · 0 评论 -
Necklace HDU - 5727 (二分图)
题意: 给出n个yang珠子n个yin珠子。 给出抵消的编号 询问排成环,最少可以形成个被抵消的yang珠子 思路: 枚举yang珠子在yin珠子排列的可能。一次求出不抵消的匹配 数,那么抵消的=n-不抵消的 #include #include #include #include #include using namespace std; const int maxn=原创 2017-07-25 19:46:28 · 230 阅读 · 0 评论 -
Courses HDU1083 -二分图匹配
题意: p节课程,n个学生。询问是否能找到p个课代表,每个学生只能当一门课的课代表。 思路: 匈牙利裸匹配 #include #include #include #include #include #include using namespace std; const int maxn=15005; int n,m; int pre[maxn];//保存各点的匹配点 int vi原创 2017-04-20 10:52:39 · 261 阅读 · 0 评论 -
HDU-3062-Party(2-SAT)
中文题。 思路: 两种: 一种是kuangbin的两层dfs写法(我竟然wa了之后怀疑bin神板子。。T_T,最后发现自己智障点写错了)。没毛病,可以套。。 #include #include #include #include #include using namespace std; const int maxn=1000005; struct node { int v,next原创 2017-07-30 11:16:34 · 268 阅读 · 0 评论 -
HDU-3622 Bomb Game
题意: 放炸弹,每组炸弹有两个,必须使用其中一枚。多个炸弹爆破范围不可重叠。询问得分为-最小的爆炸半径。问得分最高 思路; 2-sat跑图,二分爆炸半径,用2-sat判别是否可以成立。 #include #include #include #include #include using namespace std; const int maxn=205; const double eps=原创 2017-07-30 09:51:03 · 315 阅读 · 0 评论 -
Treasure Exploration(POJ_2594) -有向图可重复点-最小路径覆盖
题意: 机器人,探索火星,有n个点,m条边, 边 u->v 为有向边,询问最少派多少机器人可以探索n个点 思路: 与无向图不同的是: 无向图每个匹配的点只能有一个入度 和一个出度 ,但是 在: 1->3 2->3 3->4 3->5 这种情况下,点3 是可以多次经过的,也就是说 3 可以有多个入度出度。 在这种情况下,我们只需要将 1->3->4 2->3->5 看成两条原创 2017-04-20 19:35:29 · 340 阅读 · 0 评论 -
hdu 1054 Strategic Game 最小顶点覆盖(二分图最大匹配)
题意: 给出多个点和某些点的连线。询问可以通过最少多少个点,看到所有叶子 #include #include #include #include #include #include using namespace std; const int maxn=1505; int n,m; int pre[maxn];//保存各点的匹配点 int vis[maxn]; int voc[maxn];原创 2017-04-18 17:02:25 · 291 阅读 · 0 评论 -
poj3020-Antenna Placement-最小点覆盖
题意: 每个雷达可以最多覆盖相邻两个城市* ,询问最少防止几个雷达 思路: 这种类型在 二分图建图方法这篇文章中有讲。因为只能覆盖2个,而这个2 便是建图的依据,枚举点的位置,是否可以同相邻四点建立边, 之后找出最大匹配。 雷达最少的数量,相当于一个点, 就是说用最少的点覆盖所有的城市, 便是一个最小点覆盖的问题: 最小点覆盖= 总点数 - 最大匹配。 #include #in原创 2017-04-20 12:04:45 · 259 阅读 · 0 评论 -
最大团模板
#include #include #define N 1010 /* 最大团 = 补图G的最大独立集数 ———>最大独立集数 = 补图G'最大团 */ //最大团模板 bool a[N][N];//a为图的邻接表(从1开始) int ans, cnt[N], group[N], n, m, vis[N];//ans表示最大团,cnt[N]表示当前最大团的节点数,g原创 2017-10-03 14:12:54 · 977 阅读 · 0 评论