Problem FZU 2232 炉石传说(二分匹配)

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2232

分析:因为是要求所有的学长一次性打败所有的敌人,所以可以看做是匹配问题。构建一个图,G[i][j]=1表示学长在攻击对手后,自己的生命值大于0,对方生命值小于等于0。然后看匹配数是否为n即可。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <stack>
#include <math.h>

using namespace std;

#define met(a, b) memset(a, b, sizeof(a))
#define maxn 303
#define INF 0x3f3f3f3f
const int MOD = 1e9+7;

typedef long long LL;
int v[maxn], used[maxn], G[maxn][maxn];
int n;

struct point
{
    int x, y;
}a[maxn], b[maxn];

int Hungary(int u)
{
    for(int i=1; i<=n; i++)
    {
        if(!v[i] && G[u][i])
        {
            v[i] = 1;
            if(!used[i] || Hungary(used[i]))
            {
                used[i] = u;
                return 1;
            }
        }
    }
    return 0;
}

int main()
{
    int T;

    scanf("%d", &T);
    while(T --)
    {
        memset(G, 0, sizeof(G));

        scanf("%d", &n);

        for(int i=1; i<=n; i++)
            scanf("%d %d", &a[i].x, &a[i].y);

        for(int i=1; i<=n; i++)
            scanf("%d %d", &b[i].x, &b[i].y);

        for(int i=1; i<=n; i++)///学长
        {
            for(int j=1; j<=n; j++)///对手
            {
                int p = a[i].x-b[j].y;///学长打对手
                int q = b[j].x-a[i].y;///对手打学长

                if(p>0 && q<=0)
                    G[i][j] = 1;
            }
        }

        memset(used, 0, sizeof(used));
        int ans = 0;

        for(int i=1; i<=n; i++)
        {
            memset(v, 0, sizeof(v));
            if(Hungary(i))
                ans ++;
        }

        if(ans == n) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

时间: 2024-12-28 17:57:49

Problem FZU 2232 炉石传说(二分匹配)的相关文章

HDU 3861 The King’s Problem (强连通+二分匹配)

题目地址:HDU 3861 这题虽然是两个算法结合起来的.但是感觉挺没意思的..结合的一点也不自然,,硬生生的揉在了一块...(出题者不要喷我QAQ.) 不过这题让我发现了我的二分匹配已经好长时间没用过了..都快忘了..正好在省赛之前又复习了一下. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm>

HDU 3861 The King’s Problem 连通分量+二分匹配

题意:n个城市,m条有向边, 现在要把这个图分成块,对于块的定义:1,所有能够互通的点一定在一个块内.2,一个点可以到达另一个点,所经过的点只能是这个块内的.问做少要分多少个块? 想法:显然tarjan先缩点,然后可以想到,要想百分之一百满足第2个条件,那么每一个块最多只能有所点后的两个点,所以对所得的缩点进行二分匹配,然后求得最大独立集=col-(最大匹配数) #include<iostream> #include<cstdio> #include<cstring>

hdu 4185 Oil Skimming(二分匹配)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 883    Accepted Submission(s): 374 Problem Description Thanks to a certain "green" resources company, there is a new profitable

hdu 5093 Battle ships 最大二分匹配

Battle ships Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 589    Accepted Submission(s): 233 Problem Description Dear contestant, now you are an excellent navy commander, who is responsible

hdoj 2063 过山车 【二分匹配之匈牙利算法】

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11520    Accepted Submission(s): 5072 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)

Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 935    Accepted Submission(s): 523 Problem Description In Diagon Alley ,there is only one Wand-se

HDU 2063:过山车(二分匹配,匈牙利算法)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9745    Accepted Submission(s): 4294 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

HDU 1150:Machine Schedule(二分匹配,匈牙利算法)

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5371    Accepted Submission(s): 2658 Problem Description As we all know, machine scheduling is a very classical problem in compu

LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 N NN 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 N NN 个数中第 K KK 大的数字的最小值是多少. 输入格式 第一行给出三个整数