HDU 4685 Prince and Princess(二分图 + 强连通)

OpenCV简单应用:图像模糊处理 OpenCV是一个广泛使用的开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法。本文将介绍如何使用OpenCV对图像进行模糊处理,并提供相应的源代码。该函数接受两个参数:第一个参数是输入图像,第二个参数是指定模糊核大小的元组。在这个例子中,我们使用了一个5x5的模糊核。您可以尝试不同大小的模糊核,以获得不同程度的模糊效果。函数和指定不同大小的模糊核,我们可以实现不同程度的模糊效果。该函数接受两个参数:第一个参数是窗口的名称,第二个参数是要显示的图像。在上面的代码中,我们首先使用。要运行上述代码,请将。 阅读详情

Problem Description
There are n princes and m princesses. Princess can marry any prince. But prince can only marry the princess they DO love.
For all princes,give all the princesses that they love. So, there is a maximum number of pairs of prince and princess that can marry.
Now for each prince, your task is to output all the princesses he can marry. Of course if a prince wants to marry one of those princesses,the maximum number of marriage pairs of the rest princes and princesses cannot change.
 

Input
The first line of the input contains an integer T(T<=25) which means the number of test cases.
For each test case, the first line contains two integers n and m (1<=n,m<=500), means the number of prince and princess.
Then n lines for each prince contain the list of the princess he loves. Each line starts with a integer ki(0<=ki<=m), and then ki different integers, ranging from 1 to m denoting the princesses.
 

Output
For each test case, first output "Case #x:" in a line, where x indicates the case number between 1 and T.
Then output n lines. For each prince, first print li, the number of different princess he can marry so that the rest princes and princesses can still get the maximum marriage number.
After that print li different integers denoting those princesses,in ascending order.
 

Sample Input
2 4 4 2 1 2 2 1 2 2 2 3 2 3 4 1 2 2 1 2
 

Sample Output
Case #1: 2 1 2 2 1 2 1 3 1 4 Case #2: 2 1 2
 

参考博客:  http://www.cnblogs.com/frog112111/p/3387173.html


感觉参考博客写的听仔细的



#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>


#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)

#define eps 1e-8
typedef __int64 ll;

#define fre(i,a,b)  for(i = a; i <b; i++)
#define free(i,b,a) for(i = b; i >= a;i--)
#define mem(t, v)   memset ((t) , v, sizeof(t))
#define ssf(n)      scanf("%s", n)
#define sf(n)       scanf("%d", &n)
#define sff(a,b)    scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define pf          printf
#define bug         pf("Hi\n")

using namespace std;

#define INF 0x3f3f3f3f
#define N 20005

int boy[N],girl[N],vis[N];  //   二分图
int time[N],low[N],cnt,time_num,instack[N],type[N]; //强连通
int n,m,mn;
vector<int>g[N];
stack<int>q;

bool dfs(int x)
{
    int i,j;

    fre(i,0,g[x].size())
    {
        int to=g[x][i];

        if(vis[to]) continue;

        vis[to]=1;

        if(girl[to]==0||dfs(girl[to]))
        {
            boy[x]=to;
            girl[to]=x;
            return true;
        }
    }
   return false;
}

void xiong()
{
    int i,j;
    mem(boy,0);
    mem(girl,0);

    fre(i,1,mn+1)
    {
        mem(vis,0);
        dfs(i);
    }
}


void leave()
{
    int i,j;
    int all=2*mn;

    fre(i,1,mn+1)
    {
        if(boy[i]==0)
        {
           all++;
           fre(j,1,mn+1)
             g[j].push_back(all);

          boy[i]=all;
          girl[all]=i;
        }
    }

   fre(i,mn+1,mn*2+1)
    if(girl[i]==0)
    {
        all++;

        fre(j,mn+1,mn*2+1)
         g[all].push_back(j);

        boy[all]=i;
        girl[i]=all;
    }

   fre(i,1,all+1)
   {
      if(boy[i])
        g[boy[i]].push_back(i);
   }
}

void tarjan(int x)
{
    int i,j;
    time[x]=low[x]=++time_num;

    instack[x]=1;
    q.push(x);

    fre(i,0,g[x].size())
    {
        int to=g[x][i];

        if(time[to]==0)
        {
            tarjan(to);

            if(low[to]<low[x])
                low[x]=low[to];
        }
       else
         if(instack[to]&&time[to]<low[x])
          low[x]=time[to];
    }

    int to;

    if(time[x]==low[x])
    {
        cnt++;

        do{
           to=q.top();
           q.pop();
            instack[to]=0;
           type[to]=cnt;
        }while(to!=x);

    }

}

void solve()
{
    int i,j;
    mem(time,0);
    mem(low,0);
    mem(instack,0);
    mem(type,0);

    cnt=time_num=0;

    while(!q.empty()) q.pop();

    fre(i,1,mn+1)
        if(time[i]==0)
            tarjan(i);

    int ans[N],k;

    fre(i,1,n+1)
    {
        k=0;

        fre(j,0,g[i].size())
        {
            int to=g[i][j];

            if(type[i]!=type[to]) continue;

            if(to-mn<=m)
                 ans[k++]=to-mn;


        }
        sort(ans,ans+k);

        pf("%d",k);
        fre(j,0,k)
          pf(" %d",ans[j]);
        pf("\n");
    }

}

int main()
{
    int i,j,t,ca=0;
    sf(t);
    while(t--)
    {
        sff(n,m);
        mn=max(n,m);

        fre(i,1,mn*4)
            g[i].clear();

        fre(i,1,n+1)
         {
            int k,x;
            sf(k);
            while(k--)
            {
                sf(x);
                g[i].push_back(x+mn);
            }
         }

       pf("Case #%d:\n",++ca);

       xiong();

       leave();
       solve();
    }
    return 0;
}


【Unity工具篇】| 使用YooAsset接入自己的游戏项目,实现完整热更新流程 前面文章介绍了YooAsset的原理和接入官方示例文档的文章介绍,本文使用YooAsset接入自己的游戏项目做示例。 【Unity工具篇】| 资源管理插件YooAsset,原理及相关配置 【Unity工具篇】| 游戏完整资源热更新流程,YooAsset官方示例项目 具体接入方法有很多种,本文会参照官方示例 Space Shooter 太空战机DEMO 用到的方式接入自己的游戏项目。 阅读详情

相关推荐

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1737

HDU-4685-Prince and Princess(二分匹配+强连通分量)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 POJ1904加强版本 大致题意: N个王子,N个妹子,每个王子喜欢N个妹子中的K个, 让求所有最大匹配每个王子解的集合。 题解: 问题主要在建边,设王子集合为X,妹纸集合为Y, 那么王子的选择为X->Y, 已知一组完美匹配方案X'->Y'

不会吃鱼的喵 505

Nexus3国内高速下载指南:多版本全平台资源汇总

本文针对国内开发者从官网下载Nexus 3速度慢、易失败的问题,提供了详尽的解决方案。汇总了Windows、Linux、macOS等多个平台的Nexus 3历史及最新版本(如3.31.1)的国内高速下载链接,并附有版本选择建议与Linux环境下的快速启动指南,帮助用户高效获取和部署这一流行的仓库管理工具。

jwt8token的博客 431

hdu 4685 (强联通 二分匹配 )

先两边的点增加至n+m-res, res是原图的最大匹配,然后做一次完美匹配。新建一个图G,对于王子匹配的公主向该王子喜欢的其他公主连一个边,求强连通分量,则王子喜欢的公主并且与王子匹配的公主在同一个强联通分量里面都能与王子匹配并且最大匹配数不会减少。 实际上是王子之间交换各自匹配的公主,如图 因为原图不是完美匹配,有些王子公主是单身狗,无法实现上述交换

To_c_t_w 445

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 516

Prince and Princess

Prince and Princess 题意:给出两行各不相同的数字,求最长公共子序列。 思路:O(p*q)的求法可能超时,因为数字各不相同,我们可以把第一组数字的下标存下来,然后第二组保存数字对应在第一组的下标,最后转换成求最长上升子序列即可。 #include<bits/stdc++.h> using namespace std; int p[70000],q[70000]...

天真有邪的博客 373

ArcGIS中地理坐标系与投影坐标系以及投影转换

简单介绍arcgis软件中坐标系定义、设置和常见问题。

weixin_41399650的博客 8万+

【hdu】4685 Prince and Princess【二分匹配+tarjan】

题意:有n个王子,m个公主,每个王子有他自己喜欢的公主们,问一个王子可以匹配的公主有哪些,要求一个王子匹配一个公主后,总的可匹配数不能减少,也就是不能让别的王子的本来可以有老婆的,现在没了。 题解:题意和poj1904集合一样,只不过那题给出了完美匹配,且王子与公主都是n个,这题又加了限制,是poj1904的加强版,可以先试试那题再来做这题后好理解很多,这是poj1904的题解 http://b

a709743744的博客 527

慕课软件质量保证与测试(习题集)

慕课金陵科技学院.软件质量保证与测试.期末复习.习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 软件测试的方法和技术2.3 单元测试2.4 课后作业3 黑盒测试3.1 黑盒测试概述3.2 等价类划分测试3.3 边界值测试3.4 错误推测法3.5 判定表驱动法3.6 因果图法3.7 场景法3.8 正交实验法3.9 单元测试

weixin_42473228的博客 5万+

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

statistics+insight+vista+power 903

HDU 4685 Prince and Princess (二分图匹配+强连通分量)

题意:有n个王子和m个公主,每个王子都有若干个喜欢的公主,王子需要娶喜欢的公主,一个王子只能娶一个公主。输出对于每个王子,他可以娶的公主的编号的集合。王子娶这个集合的任一个公主,其他王子与公主的最大匹配数不变。 题解:二分图匹配+强连通分量 对于题目要求王子娶集合任意公主,最大匹配都不变,我们可以想到强连通分量,我们在分量内放入等量的能够任意匹配的王子和公主,这样无论王子选哪一个,其他王子也有的选。 但是由于这题王子和公主的数量不等,我们可以引入虚拟结点,具体一点来说就是:在求完最大匹配后,对于未匹配的结点

gongyuandaye的博客 269

1️⃣ Coze智能体基础入门教学(2025年全新版本)

不妨设想一下,倘若我们能够打造出一个数字助手,它不但能精准洞悉我们的需求,更可以独立思索、学习以及付诸行动,这便是 AI Agent 的基础理念。它恰似计算机世界里的 “智慧精灵”,能够感知周遭环境、做出判断并采取行动。AI Agent 的发展之路精彩纷呈。它走过了三个重要阶段:起初,它犹如一个被规则束缚的机器人,只能按预设好的指令开展工作。接着,它学会运用统计学方法,通过分析数据来做决策,变得越发灵活。到如今,凭借深度学习技术,它已经能够像人类一样去学习复杂的任务了。

李同学Lino的博客 4081

hdu 4685 Prince and Princess(二分图匹配 + 强连通)

题目链接:hdu 4685 Prince and Princess解题思路K为当前最大匹配数,王子增加M-K个虚拟点用来匹配没有配对成功的公主,公主增加N-K的虚拟点用来匹配没有配对成功的王子,然后从公主建一条反向边到其配对的王子,做一次强连通,属于同一联通分量的王子和公主可以配对。代码#include <cstdio> #include <cstring> #include <vector> #i

不慌不忙、不急不躁 941

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

HDU - 4685 Prince and Princess(强连通缩点+二分图完备匹配)

题目链接:点击查看 题目大意:给出n个王子和m个公主,每个王子都有喜欢的公主,题目需要我们在尽可能多的王子可以匹配到喜欢的公主的情况下,求出每个王子所能娶的所有公主,必须保证王子娶了其中任何一个之后,其他的王子也都能娶到自己喜欢的公主 题目分析:poj1904的加强版,之前那个题是n个王子和n个公主,并且初始时就已经给出了完备匹配,但是这个题目需要让我们自己求出完备匹配,然后剩下的就和之前那个...

Falcon的博客 488

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

H - Prince and Princess HDU - 4685(强连通分量缩点+二分图匹配+奇怪建图)

H - Prince and Princess HDU - 4685(强连通分量缩点+二分图匹配+奇怪建图) 题目:传送门 思路见注释 代码 : /* 做法: 1.建图最大匹配 2.增加点,给不能匹配的匹配上 3.再次二分图匹配 4.对于u,匹配的match[u],那么match[u]连接所有对应u喜欢的顶点 5.强连通分量缩点. 6.对于u ,对于喜欢的公主v,如果v和match[u]颜色相同,...

Dch19990825的博客 296

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

HDU 4685 Prince and Princess(二分图+强连通分量)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685   题意:给出n个王子和m个公主。每个王子有一些自己喜欢的公主可以匹配。设最大匹配为M。那么对于每个王子,可以选择哪些自己喜欢的公主使得选择之后最大匹配仍为M? 思路:(1)首先,想到的一个方法是先求一次最大匹配。然后枚举每个王子喜欢的公主作为该王子的匹配,判断能否为之前匹配该公主的王子重...

weixin_33788244的博客 127

HDU 4685. Prince and Princess

链接 http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意 nnn 个王子,mmm 个公主,每个王子可以娶他喜欢的公主中的一个,每个公主只能嫁个一个王子,必须保证最大匹配,升序输出每个王子可以娶的公主的编号 思路 先求二分图最大匹配,给两边未匹配的点添加虚点凑成完美匹配(虚点与另一边所有点之间都要加一条有向边) 然后在所有匹配的两点之间加一条反向边 最后求强连通分量,每个强连通分量中与王子直接相连的公主就是他可以娶的公主 代码 #include<bits/

c4Lnn 的 优快云 博客 190

HDU - 4685 Prince and Princess 完美匹配+SCC

一、内容 There are n princes and m princesses. Princess can marry any prince. But prince can only marry the princess they DO love. For all princes,give all the princesses that they love. So, there is a m...

Tizzi的博客 1010

hdu4685 Prince and Princess(tarjan强连通分量+二分图匹配)

思路来源 https://blog.youkuaiyun.com/sdj222555/article/details/9990131 预备题目 poj1904King's Quest n个(n<=2000)王子,n个公主, 已知第i个王子喜欢ki个公主,以下给出k个数代表各个公主编号 最后给出一种完美匹配,代表第j个公主最终选择了哪个王子 要求求出每个王子的可能喜欢的公主集合,使得王子选...

小衣同学的博客 401

HDU4685:Prince and Princess(二分图匹配+tarjan)

Prince and Princess Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2281Accepted Submission(s): 677 题目链接:http://acm.hdu.edu.cn/showpr...

dft539533的博客 201

hdu 4685 Prince and Princess

2013年长沙区域赛网赛I题 当时看到题就发现这题和hdu4685是一模一样的,但是很遗憾在比赛的时候居然没能过。深深的自责。写错一句代码 题意:20000个点的二分图,冗余边的定义就是如果这条边进入匹配之后,总匹配数无论如何怎么选择都无法达到最大匹配。 解法:先求出一次二分匹配,先考虑王子和公主都进入完美匹配的情况,那么对于任意一个王子,对公主建图,从他匹配到的公主连一条边到他剩余喜欢的公主

春天小猪 1370

hdu4685Prince and Princess 二分图+Tarjan缩点

hdu4685Prince and Princess 题目传送门 分析 题目大意:一个王子喜欢好多妹子,现在要让最多的王子妹子双宿双飞,同时求出一个王子可以和多少个妹子结婚并且不影响别的王子妹子双宿双飞的对数。 很强的一道二分图,是poj1904的加强版本。 有一个正经的名字叫二分图匹配的可行边。 首先考虑完备匹配的情况。 一种很神仙的做法是,王子照样向妹子连边,但是如果某个妹子匹配了王子,把那个...

maxtir的博客 366

HDU 4685 Prince and Princess (二分图匹配 + 强连通分量)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:有n个王子和m个公主,每个王子有自己喜欢的公主,王子只跟自己喜欢的公主配对,公主可以和任何王子配对,输出王子可能的配偶,需要保证王子与这些配偶中的任意一个结婚,都不会影响到剩余的王子的配对数 思路:因为王子和公主数目会不同,所以会有人无法配对,所以先跑一遍二分图匹配求出最大...

Tongqi 914

hdu4685Prince and Princess(二分图最大匹配+SCC)

多校第8场UESTC的题目,长沙网络赛I题。 【题意】 给定二分图,求哪些边选择作为匹配仍然可以得到最大匹配。 【分析】 和http://www.cnblogs.com/wangsouc/articles/3360635.html思路相同, 【吐槽】 写完测试样例,其实答案是对的,我把Input看成Output以为错了。。。跪了2个多小时。。囧。。 经常犯二。 ...

dechi5213的博客 184

HDU 4685 Prince and Princess(最大匹配+强连通分量)

题意:n个王子和m个公主,王子只能和他喜欢的公主结婚,公主可以和所有的王子结婚,输出所有王子可能的结婚对象。 思路:这道题是poj 1904的强化班 POJ1904传送门 之所以说是强化,主要是因为这样几点:首先王子和公主的数目不同,这就导致了有一些王子无法和公主结婚,其次POJ那道题给出了一个完美匹配,而这道题并没有给出。 解决方法,我们可以把这个图先构造出一个完美匹配,具体方法是先求出这

GODSPEED 648
上一篇: POJ 1904 King's Quest(强连通)
下一篇: ZOJ 1610 Count the Colors(线段树区间更新)
左眼皮跳跳~
博客等级 码龄13年 17粉丝 400原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值