hdu 5943 Kingdom of Obsession 二分图匹配+素数定理

Posted xjhz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5943 Kingdom of Obsession 二分图匹配+素数定理相关的知识,希望对你有一定的参考价值。

Kingdom of Obsession

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)


Problem Description
There is a kindom of obsession, so people in this kingdom do things very strictly.

They name themselves in integer, and there are n people with their id continuous (s+1,s+2,,s+n) standing in a line in arbitrary order, be more obsessively, people with id x wants to stand at yth position which satisfy

xmody=0


Is there any way to satisfy everyone\'s requirement?
 

 

Input
First line contains an integer T , which indicates the number of test cases.

Every test case contains one line with two integers n , s .

Limits
1T100 .
1n109 .
0s109 .
 

 

Output
For every test case, you should output \'Case #x: y\', where x indicates the case number and counts from 1 and y is the result string.

If there is any way to satisfy everyone\'s requirement, y equals \'Yes\', otherwise y equals \'No\'.
 

 

Sample Input
2 5 14 4 11
 

 

Sample Output
Case #1: No Case #2: Yes
 

 

Source

 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
#define eps 1e-14
const int N=2e5+10,M=1e6+10,inf=1e9+10,mod=1e9+7;
const ll INF=1e18+10;
int prime(int n)
{
    if(n<=1)return 0;
    if(n==2)return 1;
    if(n%2==0)return 0;
    int k, upperBound=n/2;
    for(k=3; k<=upperBound; k+=2)
    {
        upperBound=n/k;
        if(n%k==0)return 0;
    }
    return 1;
}
const int MAXN=1505;
map<int,int>linker;
map<int,int>used;
vector<int>mp[MAXN];
int uN;
bool dfs(int u)
{
    for(int i=0;i<mp[u].size();i++)
    {
        if(!used[mp[u][i]])
        {
            used[mp[u][i]]=1;
            if(linker[mp[u][i]]==0||dfs(linker[mp[u][i]]))
            {
                linker[mp[u][i]]=u;
                return true;
            }
        }
    }
    return false;
}
int hungary()
{
    int u;
    int res=0;
    linker.clear();
    for(u=1;u<=uN;u++)
    {
        used.clear();
        if(dfs(u)) res++;
    }
    return res;
}
int main()
{
    int T,cas=1;
    scanf("%d",&T);
    while(T--)
    {
        for(int i=0;i<MAXN;i++)
           mp[i].clear();
        int n,s;
        scanf("%d%d",&n,&s);
        if(n>s)swap(n,s);
        int p=0;
        for(int i=s+1; i<=s+n; i++)
        {
            if(prime(i))
            {
                p++;
                if(p>=2)break;
            }
        }
        printf("Case #%d: ",cas++);
        if(p>=2)
        {
            printf("No\\n");
            continue;
        }
        for(int i=s+1; i<=s+n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(i%j==0)
                {
                    mp[j].push_back(i);
                }
            }
        }
        uN=n;
        int hh=hungary();
        if(hh==n)
            printf("Yes\\n");
        else
            printf("No\\n");
    }
    return 0;
}

 

以上是关于hdu 5943 Kingdom of Obsession 二分图匹配+素数定理的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5943 Kingdom of Obsession 二分图的匹配

HDU 5943 Kingdom of Obsession

HDU5943 Kingdom of Obsession(思路题+二分匹配)

HDU 5943 Kingdom of Obsession 二分图匹配 匈牙利算法 (中国大学生程序设计竞赛(杭州))

[HDOJ5943]Kingdom of Obsession(最大匹配,思路)

hdu-5583 Kingdom of Black and White(数学,贪心,暴力)