HDOJ 5943 Kingdom of Obsession【2016杭州现场赛】【二分图匹配暴力】

现场赛的铜牌题,没有搞出来挺遗憾的


题意:如果i%j==0,那么说(i,j)是可以匹配的

题目问:(s+1,s+2,……,s+n),(1,2,……,n)这两个数组能否找到某种对应方式,使得完全匹配(也就是说等于n)



一开始的思路是:素数是很特殊的数,当值很大的时候,(s+1,s+2,……,s+n)不能出现两个素数

但是这个判定条件其实很奇怪:因为不知道怎么定义值很大



那么:想着小数据打表:什么叫做小数据呢?

n很小:因为二分图匹配的算法是O(NM),所以不妨定在1000

这个范围内的直接跑算法



那么当n比较大的时候呢?直接输出no吗?

思路接近了,但是有一种很极端的情况

n=1001,s=1

这组数据的意思是:(2,3,4,……,1002)来匹配(1,2,3,4,……,1001)

发现什么了吗?中间有很多个数都是重复的!重复的数是一定可以自己匹配自己的

那么这组算大数据吗?!不算:因为s很小

所以,如果n很大,s很小,会有很多个重叠的部分:先删去重叠的,然后暴力匹配


当n很大,s也很大:直接输出no

其实是有理论依据的:因为n和s都是大于1000的

在1e9的范围内,相邻两个素数的最大距离是300+

那么意味着,在(s+1,s+2,……,s+n)中,删去与(1,2,……,n)重复的部分,肯定是有两个素数的,他们是不可能同时匹配到1的

理论上的一个文字证明吧


代码如下:(我的ccpc的铜牌,桑心)

#include<bits/stdc++.h>
using namespace std;

const int maxn=1050;
int uN,vN;
int T,n,s;
int g[maxn][maxn];
int linker[maxn];
bool used[maxn];

bool dfs(int u){
    for(int v=0;v<vN;v++)
    if (g[u][v]&&!used[v]){
        used[v]=true;
        if (linker[v]==-1||dfs(linker[v])){
            linker[v]=u;
            return true;
        }
    }
    return false;
}

int hungary(){
    int res=0;
    memset(linker,-1,sizeof(linker));
    for(int u=0;u<uN;u++){
        memset(used,false,sizeof(used));
        if (dfs(u)) res++;
    }
    return res;
}

int main(){
    scanf("%d",&T);
    for(int Case=1;Case<=T;Case++){
        scanf("%d%d",&n,&s);
        memset(g,0,sizeof(g));
        if (n<=1000){
            uN=vN=n;
            for(int i=s+1;i<=s+n;i++)
                for(int j=1;j<=n;j++)
                    if (i%j==0)
                        g[i-s-1][j-1]=1;
            if (hungary()==n)
                printf("Case #%d: Yes\n",Case);
            else
                printf("Case #%d: No\n",Case);
        }
        else if (s<=1000){
            uN=vN=s;
            for(int i=n+1;i<=n+s;i++)
                for(int j=1;j<=s;j++)
                    if (i%j==0)
                        g[i-n-1][j-1]=1;
            if (hungary()==s)
                printf("Case #%d: Yes\n",Case);
            else
                printf("Case #%d: No\n",Case);
        }
        else
            printf("Case #%d: No\n",Case);
    }
    return 0;
}


全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
443735次浏览 4528人参与
# 春招别灰心,我们一人来一句鼓励 #
42340次浏览 539人参与
# 北方华创开奖 #
107494次浏览 600人参与
# 地方国企笔面经互助 #
7978次浏览 18人参与
# 同bg的你秋招战况如何? #
77401次浏览 569人参与
# 实习必须要去大厂吗? #
55833次浏览 961人参与
# 阿里云管培生offer #
120521次浏览 2222人参与
# 虾皮求职进展汇总 #
116568次浏览 887人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11726次浏览 292人参与
# 实习,投递多份简历没人回复怎么办 #
2455118次浏览 34862人参与
# 提前批简历挂麻了怎么办 #
149972次浏览 1979人参与
# 在找工作求抱抱 #
906148次浏览 9423人参与
# 如果公司给你放一天假,你会怎么度过? #
4765次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196098次浏览 18551人参与
# 机械人春招想让哪家公司来捞你? #
157652次浏览 2267人参与
# 双非本科求职如何逆袭 #
662434次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12817次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35967次浏览 384人参与
# 简历中的项目经历要怎么写? #
86958次浏览 1517人参与
# 参加完秋招的机械人,还参加春招吗? #
20158次浏览 240人参与
# 我的上岸简历长这样 #
452090次浏览 8089人参与
牛客网
牛客企业服务