hihoCoder#1121 二分图一?二分图判定

原题地址

只能说匈牙利算法不能更屌,而且提示里给的伪码也不能更屌了!

只用了第二个优化,因为将输入点集分割成A、B似乎挺麻烦的,索性就没用这个优化。

代码:

 1 #include <iostream>
 2 #include <cstring>
 3
 4 using namespace std;
 5
 6 #define MAX_VERTEX 1024
 7
 8 int N, M;
 9
10 bool g[MAX_VERTEX][MAX_VERTEX];
11 int m[MAX_VERTEX]; // match[vi] = ui 表示vi节点匹配的节点是ui
12 bool c[MAX_VERTEX]; // cover[vi] = true or false 表示vi节点是否已经被查询过了
13
14 bool findPath(int u) {
15   for (int i = 1; i <= N; i++) {
16     if (!g[u][i] || c[i])
17       continue;
18     c[i] = true;
19     if (!m[i] || findPath(m[i])) {
20       m[u] = i;
21       m[i] = u;
22       return true;
23     }
24   }
25   return false;
26 }
27
28 int solve() {
29   int res = 0;
30
31   for (int i = 1; i <= N; i++) {
32     memset(c, 0, sizeof(c));
33     if (!m[i] && findPath(i))
34       res++;
35   }
36
37   return res;
38 }
39
40 int main() {
41   memset(g, 0, sizeof(g));
42   memset(m, 0, sizeof(m));
43   scanf("%d%d", &N, &M);
44   for (int i = 0; i < M; i++) {
45     int u, v;
46     scanf("%d%d", &u, &v);
47     g[u][v] = g[v][u] = true;
48   }
49   printf("%d\n", solve());
50   return 0;
51 }
时间: 2024-10-12 22:26:10

hihoCoder#1121 二分图一?二分图判定的相关文章

#1121 : 二分图一?二分图判定 (HIHOCoder +二分图的判定)

#1121 : 二分图一?二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄剩男剩女的相亲时间.Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们.每行有2个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一

POJ 1904 King&#39;s Quest 强连通分量+二分图增广判定

http://www.cnblogs.com/zxndgv/archive/2011/08/06/2129333.html 这位神说的很好 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <ve

hihoCoder #1122 : 二分图二?二分图最大匹配之匈牙利算法

#1122 : 二分图二•二分图最大匹配之匈牙利算法 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上一回我们已经将所有有问题的相亲情况表剔除了,那么接下来要做的就是安排相亲了.因为过年时间并不是很长,所以姑姑希望能够尽可能在一天安排比较多的相亲.由于一个人同一天只能和一个人相亲,所以要从当前的相亲情况表里选择尽可能多的组合,且每个人不会出现两次.不知道有没有什么好办法,对于当前给定的相亲情况表,能够算出最多能同时

hihoCoder #1127 : 二分图二&#183;二分图最小点覆盖和最大独立集

#1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人

hihocoder 第三十四周 二分图三&#183;二分图最小点覆盖和最大独立集

题目1 : 二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人参加了多次相亲,那么跟他交流就可以知道这几次相亲的情况

HihoCoder1127 二分图三&#183;二分图最小点覆盖和最大独立集

二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人参加了多次相亲,那么跟他交流就可以知道这几次相亲的情况.那么问题来

hihoCoder#1121(二分图判定)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄剩男剩女的相亲时间.Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们.每行有2个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把

Hihocoder #1121 二分图一?二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)

对于拿到的相亲情况表,我们不妨将其转化成一个图.将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边.(如下图) 因为相亲总是在男女之间进行的,所以每一条边的两边对应的人总是不同性别.假设表示男性的节点染成白色,女性的节点染色黑色.对于得到的无向图来说,即每一条边的两端一定是一白一黑.如果存在一条边两端同为白色或者黑色,则表示这一条边所表示的记录有误. 由于我们并不知道每个人的性别,我们的问题就转化为判定是否存在一个合理的染色方案,使得我们所建立的无向图满

二分图判定 水题 Hihocoder 1121

#include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 10000 + 10 vector<int> G[maxn]; int c[maxn]; int n, m; bool dfs(int u, int color) { c[u]