题意:有两队骑士各n人,每位骑士会挑战对方队伍的某一个位骑士. (可能相同)
要求找以一个区间s:
集合S中的骑士不会互相挑战.
每个集合外的骑士必定会被集合S内的某个骑士挑战.

题解:讲真被题目绕懵比了,一直不知道题目在要求找啥。
骑士可以分为三类:必定在s中,必定不再s中,不确定的。
如果一个骑士的被挑战人数为0的话,那么他一定在s中。(否则就违背了2)
如果一个骑士挑战了确定在s内的骑士,那么他一定在圈外。
若某个骑士i被多个人挑战,那么要先对这些挑战者逐一进行上述判断,若某个挑战者被确定在S外,那么说明能使骑士i满足条件2的挑战者少了一个(等同于少了一个挑战者). 若所有挑战者都在S外,那么i一定在S内。

最后会有一种情况,就是该骑士跟挑战者都不能确定在圈外还是圈内,如样例的1、5,这时候让他们任意一人在圈内就可以了。

#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 200050;
int ans[maxn],f[maxn],head[maxn],vis[maxn];void dfs(int x)
{vis[x] = 1;if(vis[head[x]]==1)return;if(f[x]==1){f[head[x]] = -1;dfs(head[x]);return;}ans[head[x]] --;if(!ans[head[x]]){f[head[x]] = 1;dfs(head[x]);return;}
}int main()
{int n,i,x,ff;cin>>n;memset(ans,0,sizeof(ans));memset(f,0,sizeof(ans));memset(head,0,sizeof(ans));memset(vis,0,sizeof(ans));for(i=1;i<=2*n;i++){scanf("%d",&x);ans[x] ++;head[i] = x;}for(i=1;i<=2*n;i++)if(!ans[i]&&!vis[i]){f[i] = 1;dfs(i);}ff = 0;for(i=1;i<=2*n;i++){if(f[i]==-1)continue;if(f[i]==1){if(!ff){printf("%d",i);ff = 1;}elseprintf(" %d",i);continue;}if(i<=n){if(!ff){printf("%d",i);ff = 1;}elseprintf(" %d",i);}}printf("\n");return 0;
}

转载于:https://www.cnblogs.com/luoxiaoyi/p/9771645.html

Gym - 101480K_K - Kernel Knights (DFS)相关推荐

  1. Kernel Knights (Gym - 101480K)

    题目链接 #include <bits/stdc++.h>using namespace std; typedef long long ll; int a[200005]; //存放原始数 ...

  2. 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路

    文章目录 1 前言 2 回顾 2.1 主要内容 2.2 知识点回顾 3 实战分析 3.1 代码编写阶段 3.2 预编译阶段 3.2.1 No such file or directory (找不到某个 ...

  3. rt-thread 使用心得

    rt-thread 使用心得 最近做了一个项目,接触到了 rt-thread 这款国产实时操作系统,进行了简单的配置之后就能够在板子上面调试,确实很方便! 下面是我在配置的过程中遇到的一些问题,以及对 ...

  4. DFS Gym 100553J Jokewithpermutation

    题目传送门 1 /* 2 题意:将字符串分割成一个全排列 3 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 4 DFS还是写不来,难道是在家里懒? 5 ...

  5. Gym - 100989J -(DFS)

    题目链接:http://codeforces.com/gym/100989/problem/J J. Objects Panel (A) time limit per test 1.0 s memor ...

  6. POJ-2488 A Knights Journey-深度优先搜索DFS

    POJ-2488 A Knights Journey-深度优先搜索 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37974 A ...

  7. 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】

    [链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...

  8. 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K

    题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...

  9. Gym - 101972B Arabella Collegiate Programming Contest (2018) B. Updating the Tree 树DFS

    题面 题意:T组数据,每次给你1e5个点的树(1为根),每个点有一权值,询问1-n每个节点的子树中, 至少修改几个点的权值(每次都可以任意修改),才能让子树中任意2点的距离==他们权值差的绝对值 无解 ...

最新文章

  1. 在移动安全领域,人工智能未来该扮演怎样的角色?
  2. hdu4825 字典树 + 贪心
  3. react编译报错:Import in body of module; reorder to top import/first
  4. python socket 说明
  5. 函数return,有些地方你可能还没掌握
  6. C#面向对象名词比较(一)
  7. Apache ActiveMQ 5.9发布
  8. 软件工程学习笔记(考试版)
  9. 打包jar文件 外部调用资源 so等
  10. JAVA Swing 事件监听
  11. [js高手之路]javascript腾讯面试题学习封装一个简易的异步队列
  12. word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!
  13. 关于stack 和heap
  14. python 怎么样去txt中提取xml_Python根据XML批量创建TXT并提取信息,python,xml,txt
  15. hdu1426 Sudoku Killer
  16. JAVA练习题---银行账户管理系统
  17. python 残差图_利用matplotlib绘制多元自变量的回归残差
  18. 计算机平面设计是计算机类吗,计算机平面设计是什么?平面设计就业前景怎么样?...
  19. 中心矩和原点矩_中心矩和原点矩的几何意义是什么呢,无法理解
  20. 【Ice】【01】linux 安装ice

热门文章

  1. 初学编程的小白 | 每日趣闻
  2. 面试官:因为这个语言,我淘汰了90%的人!!
  3. TOJ4537: n阶行列式
  4. ZooKeeper服务命令
  5. DRBD数据同步部署-centos7
  6. 邓海建:让网约车成为智慧城市的“老司机”
  7. 危机四伏的千亿级金融放贷市场,我们能做什么?
  8. COZMO机器人的部分表情说明
  9. 算法题解:对于输入数字串,给出另一种数字排列,使得字典序增加尽可能小...
  10. MongoDB实现ID自增长