Gym - 101480K_K - Kernel Knights (DFS)
题意:有两队骑士各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)相关推荐
- Kernel Knights (Gym - 101480K)
题目链接 #include <bits/stdc++.h>using namespace std; typedef long long ll; int a[200005]; //存放原始数 ...
- 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路
文章目录 1 前言 2 回顾 2.1 主要内容 2.2 知识点回顾 3 实战分析 3.1 代码编写阶段 3.2 预编译阶段 3.2.1 No such file or directory (找不到某个 ...
- rt-thread 使用心得
rt-thread 使用心得 最近做了一个项目,接触到了 rt-thread 这款国产实时操作系统,进行了简单的配置之后就能够在板子上面调试,确实很方便! 下面是我在配置的过程中遇到的一些问题,以及对 ...
- DFS Gym 100553J Jokewithpermutation
题目传送门 1 /* 2 题意:将字符串分割成一个全排列 3 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 4 DFS还是写不来,难道是在家里懒? 5 ...
- Gym - 100989J -(DFS)
题目链接:http://codeforces.com/gym/100989/problem/J J. Objects Panel (A) time limit per test 1.0 s memor ...
- POJ-2488 A Knights Journey-深度优先搜索DFS
POJ-2488 A Knights Journey-深度优先搜索 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37974 A ...
- 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】
[链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...
- 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K
题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...
- Gym - 101972B Arabella Collegiate Programming Contest (2018) B. Updating the Tree 树DFS
题面 题意:T组数据,每次给你1e5个点的树(1为根),每个点有一权值,询问1-n每个节点的子树中, 至少修改几个点的权值(每次都可以任意修改),才能让子树中任意2点的距离==他们权值差的绝对值 无解 ...
最新文章
- 在移动安全领域,人工智能未来该扮演怎样的角色?
- hdu4825 字典树 + 贪心
- react编译报错:Import in body of module; reorder to top import/first
- python socket 说明
- 函数return,有些地方你可能还没掌握
- C#面向对象名词比较(一)
- Apache ActiveMQ 5.9发布
- 软件工程学习笔记(考试版)
- 打包jar文件 外部调用资源 so等
- JAVA Swing 事件监听
- [js高手之路]javascript腾讯面试题学习封装一个简易的异步队列
- word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!
- 关于stack 和heap
- python 怎么样去txt中提取xml_Python根据XML批量创建TXT并提取信息,python,xml,txt
- hdu1426 Sudoku Killer
- JAVA练习题---银行账户管理系统
- python 残差图_利用matplotlib绘制多元自变量的回归残差
- 计算机平面设计是计算机类吗,计算机平面设计是什么?平面设计就业前景怎么样?...
- 中心矩和原点矩_中心矩和原点矩的几何意义是什么呢,无法理解
- 【Ice】【01】linux 安装ice