题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943

题意:n个人编号为[s+1,s+n],有n个座位编号为[1,n],编号为i的人只能坐到编号为它的约数的座位,问每个人是否都有位置坐。

首先,可以肯定的是素数编号的人只能做到自己的编号上或者是1上,那么假如[s+1,s+n]区间内出现了两个以上的素数,那么整个情况是无解的。

其次,假如s<n的话,可以把[s+1,s+n]直接放到[s+1,s+n]上,剩下的将会是s个人和s个座位,人的编号是[n+1,n+s],座位的编号是[s+1,s+n],所以直接给s和n交换一下就行。

我断定1000个数之间一定会出现至少两个素数,因此当n>1000的时候就是无解了。

接下来就是O(n^2),按照能否整除建图了,跑出最大匹配,看看跟n是不是相等就行了。

 #include <bits/stdc++.h>
using namespace std; const int maxn = ;
int nu, nv;
int G[maxn][maxn];
int linker[maxn];
bool vis[maxn];
int s, n; bool dfs(int u) {
for(int v = ; v <= nv; v++) {
if(G[u][v] && !vis[v]) {
vis[v] = ;
if(linker[v] == - || dfs(linker[v])) {
linker[v] = u;
return ;
}
}
}
return ;
} int hungary() {
int ret = ;
memset(linker, -, sizeof(linker));
for(int u = ; u <= nu; u++) {
memset(vis, , sizeof(vis));
if(dfs(u)) ret++;
}
return ret;
} int main() {
// freopen("in", "r", stdin);
int T, _ = ;
scanf("%d", &T);
while(T--) {
scanf("%d %d", &s, &n);
memset(G, , sizeof(G));
printf("Case #%d: ", _++);
if(s < n) swap(s, n);
if(n > ) {
puts("No");
continue;
}
nu = * n, nv = n;
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
if((s + i) % j == ) G[i+n][j] = ;
}
}
if(hungary() == n) puts("Yes");
else puts("No");
}
return ;
}

[HDOJ5943]Kingdom of Obsession(最大匹配,思路)的更多相关文章

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

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

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

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. hdu5943 Kingdom of Obsession 二分图+打表找规律

    题目传送门 Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  4. 【HDOJ5943】Kingdom of Obsession(数论)

    题意:给定n个人,n个座位,人的编号是[1,n],座位的编号是[s+1,s+n],编号为i的人能坐在编号为j的座位上的条件是j%i=0 问是否存在一组方案使得座位和人一一对应 n,s<=1e9 ...

  5. HDU 5943 Kingdom of Obsession

    题意:n个人编号为[s+1, s+n],有n个座位编号为[1,n],编号为 i 的人只能坐到编号为它的约数的座位,问每个人是否都有位置坐. 题解:由于质数只能坐到1或者它本身的位置上,所以如果[n+1 ...

  6. 「国庆训练」Kingdom of Obsession(HDU-5943)

    题意 给定\(s,n\),把\(s+1,s+2,...,s+n\)这\(n\)个数填到\(1,2,...,n\)里,要求\(x\)只能填到\(x\)的因子的位置(即题目中\(x\%y=0\)那么x才能 ...

  7. HDU 5938 Kingdom of Obsession(数论 + 二分图匹配)

    题意: 给定S,N,把S+1,S+2,...S+N这N个数填到1,2,...,N里,要求X只能填到X的因子的位置.(即X%Y=0,那么X才能放在Y位置) 问是否能够放满. 分析:经过小队的分析得出的结 ...

  8. HDU5943 Kingdom of Obsession 题解

    题意 有 \(n\) 个数 \(s+1\ldots s+n\),求是否能将这 \(n\) 个数放到 \(1\ldots n\) 上,且当令原数为 \(x\),放到 \(y\) 位置时有 \(x \mo ...

  9. bzoj 1854: [Scoi2010]游戏 (并查集||二分图最大匹配)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1854 写法1: 二分图最大匹配 思路:  将武器的属性对武器编号建边,因为只有10000种 ...

随机推荐

  1. Subversion简明手册--使用hook svn

    使用 hook ,为了方便管理员 控制提交的过程 Subversion 提供了 hook 机制.当特定的 事件发生时,相应的 hook 会被调用, hook 其实就相当于特定 事件的处理函数.每个 h ...

  2. JS货币数字转换中文

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. html插入视频

    http://www.jb51.net/web/168548.html http://www.w3school.com.cn/html/html_media.asp

  4. windows cmd command line 命令

    Reference: 1. http://msdn.microsoft.com/en-us/library/ms977170.aspx(前面有一段VB看不懂没关系) 2. http://csserve ...

  5. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  6. Java URLClassLoader和ClassLoader

    开始:看名字都带有ClassLoader,叫做类加载器,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件. 区别:其实在两个类加载 ...

  7. js笔记----(运动)淡入淡出

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. JQuery知识快览之四—样式

    前面我们获取了对象集,本文介绍怎么控制对象集的样式 基本概念 在一个html页面中,我们有两种方式来控制一个对象的样式,用HTML attribute控制,或者用CSS类来控制,这两种方法虽然都能控制 ...

  9. 20151221001 GridView 模板

    <asp:GridView ID="GridView1"                 runat="server" AllowPaging=" ...

  10. 【linux命令与工具】lsmod命令

    lsmod命令用来显示已被内核加载的模块的状态 描述: lsmod命令可以美观地显示/prco/module中的内容,这些内容是被已被内核加载模块的信息. 使用lsmod之后,系统会显示出目前已经存在 ...