nyoj 239 月老的难题 二分图最大匹配

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=239

思路:二分图最大匹配~~~ 邻接表A过~~

#include <iostream>
#include <cstring>
using namespace std;

int num;
int n,k;
int s;
struct node
{
    int u,v,w;
    int next;
}map[10010];
int head[510];
int match[510];
int used[510];

bool solve(int s)
{
    for(int i = head[s]; i != -1; i = map[i].next)
    {
        if(used[map[i].v] == 0)
        {
            used[map[i].v] = 1;
            if(match[map[i].v] == -1 || solve(match[map[i].v]) == true)
            {
                match[map[i].v] = s;
                return true;
            }
        }
    }
    return false;
}

void add_edge(int u, int v, int w)
{
    map[s].u = u;
    map[s].v = v;
    map[s].w = 1;
    map[s].next = head[u];
    head[u] = s++;
} 

int main()
{
    cin>>num;

    int a,b;
    while(num--)
    {
        s = 0;
        cin>>n>>k;

        memset(head, -1, sizeof(head));
        memset(map, 0, sizeof(map));
        memset(match,-1,sizeof(match));
        for(int i=1; i<=k; i++)
        {
            cin>>a>>b;
            add_edge(a,b,1);
        }

        int res = 0;
        for(int i=1; i<=n; i++)
        {
            memset(used, 0, sizeof(used));
            if(solve(i))
                res++;
        }
        cout<<res<<endl;
    }
    return 0;
} 
时间: 2024-10-07 22:07:31

nyoj 239 月老的难题 二分图最大匹配的相关文章

NYOJ 239 月老的难题 (深度优先遍历)

月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别编号为1~n,女孩们也分别编号为1~n. 输入 第一行是一个整数T,表示测试数据的组数(1<=T<=400) 每组

nyoj 239 月老的难题 【二分匹配之匈牙利】

月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别编号为1~n,女孩们也分别编号为1~n. 输入 第一行是一个整数T,表示测试数据的组数(1<=T<=400) 每组

nyoj 239 月老的难题

月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别编号为1~n,女孩们也分别编号为1~n. 输入 第一行是一个整数T,表示测试数据的组数(1<=T<=400)每组测

nyoj 239 月老的难题【匈牙利算法+邻接表】

月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别编号为1~n,女孩们也分别编号为1~n. 输入 第一行是一个整数T,表示测试数据的组数(1<=T<=400)每组测

NYOJ 题目587 blockhouses(二分图最大匹配)

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 月老的难题 (最大二分图匹配,匈牙利算法)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=239 月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别

NYOJ239 月老的难题 【二分图匹配&#183;匈牙利】

月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧. 假设男孩们分别编号为1~n,女孩们也分别编号为1~n. 输入 第一行是一个整数T,表示测试数据的组数(1<=T<=400) 每组

ural 1109,NYOJ 239,匈牙利算法邻接表

NYOJ 239:http://acm.nyist.net/JudgeOnline/problem.php?pid=239 ural 1109 :http://acm.timus.ru/problem.aspx?space=1&num=1109 NYOJ 月老的难题,是裸的最大匹配,很烦的是邻接阵超时.改用邻接表. #include <bits/stdc++.h> using namespace std; #define maxn 1005 vector <int> G[m

匈牙利算法dfs模板 [二分图][二分图最大匹配]

最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对的点出发,历经未配边.匹配边.未配边.匹配边.未配边....最终到达一个未配点的过程,只要把路径中的未配边和匹配边的“身份”对调,匹配就加一了.这就是一个寻找增广路的过程,通过不断寻找增广路,可以找到最大的匹配. 1 #include<cstdio> 2 #include<cstring&g