关闭

二分匹配之最大点集

192人阅读 评论(0) 收藏 举报
分类:

,给你一些边的关系,然后让你判断最大的点集数量是多少,就是用匈牙利匹配算出最大匹配数,然后用点的数量减去最大匹配数的二分之一,注意是二分之一

——————————————————————hdu1068————————————————————

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn = 1500;

int e[maxn][maxn],match[maxn],book[maxn];
int m,n;

int dfs(int u)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(book[i]==0&&e[u][i]==1)
        {
            book[i] = 1;
            if(match[i]==0 || dfs(match[i]))
            {
                match[i] = u;
                return 1;
            }
        }
    }

    return 0;
}

int main()
{
    int i,j,t1,t2,sum,k,t;
    while(scanf("%d",&n)==1)
    {
        memset(e,0,sizeof(e));//一定要记得清空
        sum = 0;
        for(i=0;i<n;i++)
        {
            scanf("%d: (%d) ",&t,&k);
            while(k--)
            {
                scanf("%d",&j);
                e[t][j] = 1;
            }
        }
        memset(match,0,sizeof(match));
        for(i=0;i<n;i++)
        {
            memset(book,0,sizeof(book));
            if(dfs(i))
                sum++;
        }

        printf("%d\n",n-sum/2);
    }
}
/*
0: (3) 4 5 6
1: (2) 4 6
2: (0)
3: (0)
4: (2) 0 1
5: (1) 0
6: (2) 0 1
*/




0
0
查看评论

点集配对问题

点集配对问题  空间里n个点,使它们配成n/2对点,使得每个点恰好在一个点对中。 要求所有点队中,两点距离之和尽量下  n d(s) = min(d{S - {i} - {j}+ |Pi Pj|  | j属于S, j > i, i = min{S}} /...
  • Colin_27
  • Colin_27
  • 2014-07-08 13:36
  • 1002

hihoCoder 1122 二分图最大匹配 最大流

题意 求二分图最大匹配 思路 没有用匈牙利算法,而是试了试要带去的两个最大流模板。。 就是加一个源点,一个汇点,源到二分图集合1的点加一个流量为1的边,集合1到集合2的边设置为流量1,集合2的点到汇点加入流量1的边 实现 模板1实现 #include <iostream> #includ...
  • luke2834
  • luke2834
  • 2015-12-07 20:39
  • 336

匹配算法·温故知新——二分图的最大(基数)匹配

反思说起二分图匹配大家都会自然而然地想到匈牙利算法,因为它太出名了。之所以有名,我想很大程度上是因为它简单,而简单更多的是指代码简单。然而站在巨人肩膀上的我们,真正遇到这个问题,如果没有接触过,能在短时间内推出这个算法么?我想未必。 更何况学会匈牙利算法,我们有是否考虑过如何推广到一般图,如何优化...
  • a1105386582
  • a1105386582
  • 2015-07-31 16:20
  • 713

二分图最大匹配问题之网络流算法

实质:把多源,多汇网络,构造成单源单汇网络,同时置所有边的容量为1。 操作:(G=(X∪Y,E)) (1)增加一个源点s和一个汇点t; (2)从s向集合X的每一个顶点引一条有向边,从集合Y的每一个顶点向t引一条有向边; (3)将原图的每条边改为从集合X向集合Y的有向边; (4)置每条边的容量为1; ...
  • m0_37846371
  • m0_37846371
  • 2017-07-30 19:24
  • 521

旋转卡壳(1)--求凸包(点集)直径

申明,本文非笔者原创,原文转载自:http://www.cnblogs.com/xdruid/archive/2012/07/01/2572303.html
  • carson2005
  • carson2005
  • 2014-06-17 14:09
  • 2551

区间点集最短两点距离

findd函数模板,分治 #include #include #include #include #include using namespace std; struct node1 { int x,y; }node[100010],node2[100010]; int c...
  • nucshiyilang
  • nucshiyilang
  • 2017-03-03 16:22
  • 192

POJ 3525 || Most Distant Point from the Sea (凸包求最大内接圆,半平面交内推r

题目在问这样一个问题:给定一个凸多边形,找到其中的一个点,使得其到每条边的距离最小值最大,输出这个距离。 其实就是在问你,这个多边形中最大的一个内切圆有多大。 怎么做呢?如果我们事先知道一个半径R,我们是不是能验证这个R是否可行呢? 答案是肯定的,这样想:如果我们把这个多边形每条边...
  • FXXKI
  • FXXKI
  • 2015-05-12 21:08
  • 547

二分匹配总结(匈牙利算法+最大权+最小权)

转自:http://dingdongsheng.cool.blog.163.com/blog/static/1186187552009431405995/ 前段时间为了省赛,我专门花了半个月来“专研”二部图,目前对二部图还是有一点点心得,所以就记录下来,希望对某些人有用。   ...
  • michaelhan3
  • michaelhan3
  • 2016-06-22 10:28
  • 1662

【今日头条2017内推笔试题】二维平面整数点集

解题思路 对所有的坐标点对y进行排序,然后按y排序顺序由大到小进行遍历,定义一个变量来保存当前已经遍历坐标点的最大x值,如果,后序节点的x值大于保存的最大x值,则输出。因为已经对y按大小进行排序,越往后遍历y值越小,而这个点想为边界点只能x值大于已经遍历序列的最大x值。并且这个x是逐渐递增的,题意...
  • dingpiao190
  • dingpiao190
  • 2017-08-23 17:05
  • 395

HDU 3829 Cat VS Dog-二分匹配&最大点集

题意:每个孩子都有一个喜欢的动物和一个讨厌的动物,若喜欢的是狗则讨厌的是猫,喜欢的是猫则讨厌狗,若一个孩子讨厌的动物被删除,喜欢的留下则他会开心,问你要怎么删除能让最多的孩子开心。 这一题建二分图是关键,对于一个孩子喜欢的动物和另一个孩子讨厌的动物相同的话,则必然这两个孩子不能同时开心,即建一条边,...
  • SSimpLe_Y
  • SSimpLe_Y
  • 2016-08-02 20:55
  • 661
    个人资料
    • 访问:83372次
    • 积分:2556
    • 等级:
    • 排名:第16997名
    • 原创:171篇
    • 转载:2篇
    • 译文:0篇
    • 评论:17条