题意:

  众所周知,老师经常在班级上点名。点名是从名单上叫一个人的名字或者id来判断名单上这个人是否在场。学生们总是有各种各样的理由不来,所以他们需要其他人帮他们答到。但是打到工作不是这么简单,出于各种考虑,他们答道遵循以下原则。

1. 每个来上课的人必须给自己达到;

2. 每个来上课的人,只能帮另外一个人达到;

3. 如果一个人想帮助另外一个人答道,那么他们id的差至少大于等于K。

  现在老师又要点名了,请问是否存在一种情况,使老师相信每个人都到场了。

输入:

  第一行有一个整数T,表示接下来会有T组数据。

  对于每组数据,第一行包含三个整数N, M, K (1<=N<=10^9,2<=M,K<=150),告诉你一共有N个学生,有M个学生到场了,K是id的最小差。第二行有M个整数,表示到场学生的id。

思路:
二分图匹配

代码: 用的增广路算法,还没学MK

 #include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXN = ; bool vis[MAXN];
bool present[MAXN];
int id[MAXN];
int matched[MAXN];
int N, M, K; inline int myAbs(int x) {
return x> ? x : -x;
} bool dfs(int v) {
vis[v] = true;
for (int u = ; u <= N; u++) if ((present[u]^present[v]) && (myAbs(u-v)>=K)) {
int w = matched[u];
if (w< || (!vis[w] && dfs(w))) {
matched[v] = u;
matched[u] = v;
return true;
}
}
return false;
} int Match() {
int res = ;
memset(matched, -, sizeof(matched));
for (int v = ; v <= N; v++) {
if (matched[v]<) {
memset(vis, false, sizeof(vis));
if (dfs(v)) {
res++;
}
}
}
return res;
} int main() {
#ifdef Phantom01
freopen("HNU11979.txt", "r", stdin);
#endif // Phantom01 int T;
scanf("%d", &T); while (T--) {
scanf("%d%d%d", &N, &M, &K);
for (int i = ; i < M; i++) {
scanf("%d", &id[i]);
}
if (N>(M<<)) {
puts("N");
continue;
}
memset(present, false, sizeof(present));
for (int i = ; i < M; i++)
present[id[i]] = true;
if ((N-M)==Match()) puts("Y");
else puts("N");
} return ;
}

HNU11979

最新文章

  1. javascript笔记:javascript的关键所在---作用域链
  2. WPF三大模板简介
  3. runc的detach, console, tty等相关问题
  4. 【转】Eclipse Class Decompiler——Java反编译插件
  5. Nginx简介及配置实用
  6. 让Word2007、word2003中的GIF图片动起来
  7. zoj 3627 Treasure Hunt II (贪心)
  8. 浏览器自动化工具-Selenium
  9. Spring声明式事务(xml配置事务方式)
  10. fgets和scanf的区别
  11. Javascript进阶篇——( JavaScript内置对象---下)--Array数组对象---笔记整理
  12. Navicat for MySQL定时备份数据库及数据恢复
  13. ASP.NET Core Razor页面禁用防伪令牌验证
  14. exchang2010OWA主界面添加修改密码选项
  15. cdqz2017-test10-rehearsal(CDQ分治&amp;可持久化线段树&amp;单调栈)
  16. Go RPC返回值
  17. 2019.01.19 bzoj4592: [Shoi2015]脑洞治疗仪(ODT)
  18. (1)List集合 (2)Queue集合 (3)Set集合
  19. Comet OJ CCPC-Wannafly Winter Camp Day8 A Aqours
  20. Xcode的快捷键及代码格式化

热门文章

  1. JS常用框架及各自特点
  2. 洛谷P2118 比例简化(暴力)
  3. 爬取xml数据之R
  4. HDU 1171 Big Event in HDU【01背包】
  5. vue非空校验
  6. mysql和mongodb的区别
  7. POJ-2253 Frogger dijsktra查找间隔最小的路径
  8. BZOJ 2342 [Shoi2011]双倍回文(manacher+堆+set)
  9. [洛谷P3982]龙盘雪峰信息解析器
  10. yum下载的rpm包离线安装