`
huyifan951124
  • 浏览: 83224 次
社区版块
存档分类
最新评论

NYOJ239 月老的难题 二分图匹配

 
阅读更多

题目大意:中文题。

算法思路:匈牙利算法的模板题,一开始用邻接矩阵做,结果超时了,后来一看,有10000的边数,难怪超时,因为要判定两点是否有边的话,就得遍历一行,每次递归都这样做的话时间花费是很大的,就改为了邻接表,过了。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f3f
#define MAXN 505
int t,n,k,a,b,e;
int maps[MAXN*4][MAXN*4],next[20050],match[MAXN],head[MAXN];
bool visited[MAXN*4];
typedef struct Edge
{
    int u;
    int v;
    int c;
};
Edge edges[20050];
void addNode(int u,int v,int c)
{
    edges[e].u=u;
    edges[e].v=v;
    edges[e].c=c;
    next[e]=head[u];
    head[u]=e++;

}
int dfs(int p)
{
    int t;
    for(int i=head[p];i+1;i=next[i])
    {
        if(edges[i].v!=0&&!visited[edges[i].v])
        {
            visited[edges[i].v]=true;
            t=match[edges[i].v];
            match[edges[i].v]=p;
            if(t==-1||dfs(t))
            {
                return 1;
            }
            match[edges[i].v]=t;
        }
    }
    return 0;
}
int main()
{
    int res;
    scanf("%d",&t);
    while(t--)
    {
        memset(visited,false,sizeof(visited));
        res=0;
        scanf("%d%d",&n,&k);
        e=0;
        memset(head,-1,sizeof(head));
        memset(next,-1,sizeof(next));
        for(int i=1;i<=k;i++)
        {
            scanf("%d%d",&a,&b);
            addNode(a,b,1);
        }
        memset(match,-1,sizeof(match));
        for(int i=1;i<=n;i++)
        {
            memset(visited,false,sizeof(visited));
            res+=dfs(i);
        }

        printf("%d\n",res);
    }
   return 0;
}

 

0
1
分享到:
评论

相关推荐

    ACM在线评测系统 NYOJ 题库 离线看题网页版 nyoj

    NYOJ,全称为南阳理工学院在线评测系统(Nanyang Institute of Technology Online Judge),是为ACM(国际大学生程序设计竞赛)以及其他编程爱好者提供的一种在线编程练习平台。该系统支持用户提交代码并进行实时...

    nyoj部分ACM答案

    ### nyoj部分ACM答案解析 #### 背景与目的 本篇文章旨在解析一个针对NYOJ(网络在线裁判系统)中ACM题目解答的示例代码。该代码使用了C++语言,并且主要涉及到了回溯算法的实现。对于初学者来说,通过深入理解这段...

    NYOJ题目 离线版

    NYOJ(New York Online Judge)是一个在线编程竞赛平台,主要面向ACM(国际大学生程序设计竞赛)的参与者。这个离线版包含了NYOJ的所有题目,为编程爱好者和参赛者提供了一个方便的本地化练习环境。通过爬虫技术,...

    ACM题库题库啊

    NYOJ,全称New York Online Judge,是一个在线编程竞赛平台,提供了丰富的ACM竞赛训练题目。离线版的NYOJ可能是将该平台的部分内容打包成CHM文件,方便用户在没有网络的情况下查阅和练习。这个CHM文件可能包含题目的...

    nyoj16.rar_site:www.pudn.com

    标题中的“nyoj16.rar”可能是指一个编程竞赛或者在线判题系统(如NOIP、NYOJ)的问题编号16的题目,而“site:www.pudn.com”通常用于搜索引擎查询,表明这个压缩文件可能来源于PUDN(普渡大学电子论坛)这个网站。...

    算法-矩形嵌套(NYOJ-16)(包含源程序).rar

    《算法-矩形嵌套(NYOJ-16)》是针对计算机科学中的一个典型问题进行探讨的资源包,其中包含了解决该问题的源程序。这个问题涉及到数据结构、图论以及算法设计等多个核心领域,是编程竞赛或算法学习中的常见题目。在...

    NYOJ.290.DictionaryTree.zip_trie树c_字典树_高级数据结构

    Trie树的高级应用还包括压缩Trie树(Patricia Trie)和Trie树的变种,如Aho-Corasick算法,它在Trie树的基础上添加了“失败指针”以实现同时匹配多个模式的功能。在实际编程中,理解和掌握Trie树可以帮助我们更高效...

    nyoj 61 传纸条(一)

    双线程动态规划问题,很值得练习。传一个ac代码,测试一下csdn的功能。

    nyoj_lvy实战开发系列《三》: 获取城市信息

    由于微信小程序没有方法可以获得当前用户所在城市的信息,所以需要调用方法来获取城市信息,用了两个方法去发送请求并返回城市信息  1. @Controller public class WechatLocationManager { private Logger logger ...

    nyoj_lvy实战开发系列《二》: 微信端开发:登录小程序

    这个小程序的主要目的是为了用户用微信的用户信息登录后将用户信息授权存入自己的数据库中,这样以后每次微信登录得到的code 所得到的 openid 可以在项目的数据库中查到该用户的相关信息。 在测试的过程中,需要用户...

    nyoj_lvy实战开发系列《一》:发送JSON信息,加密数据解密算法,UnionID机制说明

    前期小程序开发只进行到根据微信用户登录获取的code 去微信的API去获取到该用户的openId和session_key,到了第二阶段,老大让我重写OAuthManager的代码来实现微信小程序和微信公众号平台获取用户信息的优化,即将...

    南阳理工oj stl练习ac代码

    NYOJ(南阳理工在线判题系统)是南阳理工学院开发的OJ平台,它提供编程题目的提交和评测服务,帮助学生提升编程技能。在这个平台上,用户可以通过提交代码并获取反馈来检验自己对STL的理解和应用。 在STL的练习...

    南阳理工学院OJ第1版解题报告V1.0.pdf

    ### 南阳理工学院OJ第1版解题...以上解题报告覆盖了从基础数据结构与算法到高级算法设计的广泛内容,旨在培养学生的逻辑思维能力和编程技巧,同时提供了一个系统的学习路线图,帮助学生逐步掌握算法领域的核心知识。

    经典动态规划 南阳104最大和

    给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。

Global site tag (gtag.js) - Google Analytics