题意:有两队骑士各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;
}
else
printf(" %d",i);
continue;
}
if(i<=n)
{
if(!ff)
{
printf("%d",i);
ff = 1;
}
else
printf(" %d",i);
}
}
printf("\n");
return 0;
}

Gym - 101480K_K - Kernel Knights (DFS)的更多相关文章

  1. UVALive 7334 Kernel Knights (dfs)

    Kernel Knights 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/K Description Jousting is ...

  2. [BZOJ 4436][Cerc2015]Kernel Knights

    [Cerc2015]Kernel Knights Time Limit: 2 Sec Memory Limit: 512 MBSubmit: 5 Solved: 4[Submit][Status][D ...

  3. Kernel Knights (Gym - 101480K)

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

  4. ACM: Gym 100935G Board Game - DFS暴力搜索

    Board Game Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u  Gym 100 ...

  5. 【UVALive 7334】Kernel Knights

    题 题意 有两个队的骑士1到n和n+1到2n,每个骑士只能互相攻击对手队的一个骑士.kernel的意思是在这个kernel里的骑士不会互相攻击,在kernel外的骑士被kernel里的骑士攻击. 现在 ...

  6. K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)

    题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...

  7. POJ2735/Gym 100650E Reliable Nets dfs

    Problem E: Reliable NetsYou’re in charge of designing a campus network between buildings and are ver ...

  8. Gym 100650H Two Ends DFS+记忆化搜索

    Problem H: Two EndsIn the two-player game “Two Ends”, an even number of cards is laid out in a row. ...

  9. Codeforces Gym 100650D Queens, Knights and Pawns 暴力

    Problem D: Queens, Knights and PawnsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu ...

随机推荐

  1. Windows Sublime text3 搭建Go语言环境

    第一步:Go环境和配置 1.安装 Go 开发环境(省略),假设Go安装目录为 C:\Go 2.配置环境变量,下面两个环境变脸没有就加上. 资料参考:http://studygolang.com/art ...

  2. ORACLE的Copy命令和create table,insert into的比较

    在数据表间复制数据是Oracle DBA经常面对的任务之一,Oracle为这一任务提供了多种解决方案,SQL*Plus Copy 命令便是其中之一.SQL*Plus Copy 命令通过SQL*Net在 ...

  3. vue项目及插件

    vue项目的创建 方法1: cmd中执行 vue ui vue会创建一个socket,方便快捷 方法2: 命令行建立 vue create v-proj //创建项目名为v-proj的项目文件 > ...

  4. JAVA数据库连接池的革命 -- 从BoneCP到HikariCP(转)

    从BoneCP到HikariCP 今天笔者本想更新一下项目中使用到的BoneCP版本的.却无意发现jolbox网站打不开了.起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如 ...

  5. jsp必填项加红色星号

    <th><font color=red>*</font>文字:</th>

  6. SPFA(Bellman-Ford队列优化)

    原理:队列+松弛操作 将源点加入队尾,每一步读取队头顶点u,并将队头顶点u出队(记得消除标记):将与点u相连的所有点v进行松弛操作,如果能更新距离(即令d[v]变小),那么就更新,另外,如果点v没有在 ...

  7. 洛谷P1164 小A点菜 [2017年4月计划 动态规划08]

    P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...

  8. Django项目:CRM(客户关系管理系统)--06--03PerfectCRM创建基本数据01

    os.path.join(BASE_DIR, 'DBadd/DBadd_templates'), """ Django settings for PerfectCRM p ...

  9. web前端学习常用网址记录

    jetbrains下载各种软件和试用 www.jetbrains.com www.jetbrains.com/idea php服务器下载 php文档查询 php.net webAPI网站(各种教程文档 ...

  10. The method getTextContent() is undefined ?

    晚上下班的时候,把班上写了半截的代码带了回来.结果回到家后出乎意料的是回来的时候将代码导入eclipse后,下面这行代码就直接报错了,显示 getTextContent()未定义 . ((Elemen ...