当前位置: 首页 > news >正文

HDU-1068-GirlsandBoys(最大独立集,二分图匹配)

链接:https://vjudge.net/problem/HDU-1068#author=0

题意:

学校对n个学生(男女都有)进行的调查了,发现了某些学生暗生情愫,现在需要你选出一个最大的集合,这个集合内部没有两个人暗生情愫。学生的编号是0~n-1

思路:

二分图匹配,因为没有分左右每对匹配会出现两次。

而最大独立集就是总人数,减去匹配数。

代码:

#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
#include <set>
#include <iterator>
#include <cstring>
using namespace std;

typedef long long LL;
const int MAXN = 2000+10;
vector<int> G[MAXN];
int Link[MAXN], Vis[MAXN];
int n;

void Init()
{
    for (int i = 0;i < n;i++)
        G[i].clear();
}

bool Dfs(int x)
{
    for (int i = 0;i < G[x].size();i++)
    {
        int node = G[x][i];
        if (Vis[node])
            continue;
        Vis[node] = 1;
        if (Link[node] == -1 || Dfs(Link[node]))
        {
            Link[node] = x;
            return true;
        }
    }
    return false;
}

int Solve()
{
    int cnt = 0;
    memset(Link, -1, sizeof(Link));
    for (int i = 0;i < n;i++)
    {
        memset(Vis, 0, sizeof(Vis));
        if (Dfs(i))
            cnt++;
    }
    return cnt;
}

int main()
{
    while (~scanf("%d", &n))
    {
        Init();
        int s, num, p;
        for (int i = 0; i < n; i++)
        {
            scanf("%d: (%d)", &s, &num);
            for (int j = 1;j <= num;j++)
            {
                scanf("%d", &p);
                G[s].push_back(p);
            }
        }
        int cnt = Solve();
        printf("%d\n", n-cnt/2);
    }

    return 0;
}

  

转载于:https://www.cnblogs.com/YDDDD/p/10869187.html

相关文章:

  • 深入理解jvm jdk1,7(8)
  • 字典
  • AtCoder Beginner Contest 125 解题报告
  • Kodi ‘Leia’ 18.2 最终版发布
  • 科略教育—企业管理运营八大基本法
  • 关于CSS
  • elasticsearch授权访问
  • Leetcode 12 - Integer to Roman
  • yum常用命令
  • AJPFX分享JAVA修饰符详解
  • 华华教奕奕写几何
  • 《零基础入门学习Python》【第一版】视频课后答案第001讲
  • Zabbix“专家坐诊”第10期问答汇总
  • LinkedList源码阅读分析
  • Spring全家桶视频教程
  • 「面试题」如何实现一个圣杯布局?
  • 2017 年终总结 —— 在路上
  • GraphQL学习过程应该是这样的
  • php ci框架整合银盛支付
  • Python_网络编程
  • SpringBoot 实战 (三) | 配置文件详解
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue:响应原理
  • win10下安装mysql5.7
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 工作中总结前端开发流程--vue项目
  • 简单基于spring的redis配置(单机和集群模式)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端技术周刊 2019-02-11 Serverless
  • 前端面试题总结
  • 前端面试总结(at, md)
  • 深度解析利用ES6进行Promise封装总结
  • 使用agvtool更改app version/build
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $$$$GB2312-80区位编码表$$$$
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C语言)球球大作战
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (七)Knockout 创建自定义绑定
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)深入super,看Python如何解决钻石继承难题
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ******之网络***——物理***
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 命令行参数包含应用程序路径吗?
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @DataRedisTest测试redis从未如此丝滑
  • [Android]Android开发入门之HelloWorld
  • [Angular] 笔记 7:模块
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C++进阶篇]STL中vector的使用
  • [DAX] MAX函数 | MAXX函数