题意:有两队骑士各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. IOS下的 click 点击失效

    当委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. demo: & ...

  2. PHP实现git部署的方法,可以学学!

    https://mp.weixin.qq.com/s/QFpKu8oKoxOEA1BmT7pNhg   在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制,追 ...

  3. Ubuntu 16.04 配置 L2tp 客户端

    #install lib -dev libsecret--dev libgtk--dev libglib2.-dev xl2tpd strongswan #install network-manage ...

  4. IO流6 --- FileReader中使用read(char[] cbuf)读入数据 --- 技术搬运工(尚硅谷)

    FileReader 字符输入流 @Test public void test2(){ File file = new File("hello.txt"); FileReader ...

  5. (转)Json在Unity中的简单使用

    Json数据解析在Unity3d中的应用 最近做项目过程中因为Json文件名写错了一个字母Unity报错,找错误找到半夜,当时为了验错,写了一个小Demo,正好借此总结一下Json. 1.什么是Jso ...

  6. golang之switch

  7. Nacos Committers 团队首亮相,发布 0.9.0 版本

    223 天,发布 14 个版本,19 位 Committers,39 位 Contributors. 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Na ...

  8. 威胁快报|Nexus Repository Manager 3新漏洞已被用于挖矿木马传播,建议用户尽快修复

    背景 近日,阿里云安全监测到watchbog挖矿木马使用新曝光的Nexus Repository Manager 3远程代码执行漏洞(CVE-2019-7238)进行攻击并挖矿的事件. 值得注意的是, ...

  9. 洛谷 P1892 [BOI2003]团伙

    题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...

  10. Phpstrom 配置php版本语法支持