大佬求助第E题

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define out cin.tie(0)->sync_with_stdio(false)
const int md = 1e9+7;

int n, a[514], b[514], p[514];
bool vis[514];
int g[514][514];

//匈牙利算法,求最大匹配数 a -> b
bool match(int x) {
    for (int i = 0; i < n; i++)
    {
        if (!vis[i] && g[x][i]) {
            vis[i] = true;
            if (p[i] == 0 || match(p[i])) {
                p[i] = x;
                return true;
            }
        }
    }
    return false;
}

int Hungarian() {
    int cnt = 0;
    for (int i = 0; i < n; i++)
    {
        memset(vis,0,sizeof(vis));
        if (match(i))
            cnt++;
    }
    return cnt;
}


int main(int argc, char const *argv[])
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++)
    {
        cin >> b[i];
        for (int j = 0; j < n; j++) {
            if (gcd(a[j],b[i]) == 1)
                g[j][i] = 1;    //改成 g[i][j] = 1; 即可全部通过
        }
    }

    int cnt = Hungarian();

    if (cnt == n) {
        cout << "Bob" << endl;
    }
    else {
        cout << "Alice" << endl;
    }

    //system("pause");
    return 0;
}

为什么只是图的结点只是换个方向就错了,只能通过95%左右。

全部评论
反向建也是可以的,只要建图方向和匹配方向一致就好
点赞 回复 分享
发布于 2023-11-14 13:12 四川
哦,我**了,从下标0开始存的图,p数组(记录被哪个点连接)记得初始化成-1,而不是0 谢罪(
点赞 回复 分享
发布于 2023-11-14 13:12 四川

相关推荐

不愿透露姓名的神秘牛友
昨天 17:32
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:24
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务