[Cerc2015]Kernel Knights

Time Limit: 2 Sec Memory Limit: 512 MB
Submit: 5 Solved: 4
[Submit][Status][Discuss]
Description

“Jousting”是一种让骑士在高速骑行中用木制长矛相互攻击对方的中世纪竞技游戏。现在,一共有2n个骑士进入一场“Jousting”锦标赛。骑士们被平均分配到2个house。竞赛开始时,所有骑士都会对另一个house的骑士之一发起挑战。
一组解被定义为一个集合S满足:

• S中的骑士不存在相互挑战。
• 所有不在S中的骑士都被S中的骑士挑战。

现给出官方公布的挑战场次,找出一组解。
数据保证有解。

Input

第一行包括一个整数n(1<=n<=100000)——每个house的骑士数。第一个house的骑士编号为1~n,第二个house的骑士编号为n+1~2n。
接下来一行包含n个整数f1,f2,…,fn——fk指第k名骑士发起的挑战。
最后一行包含n个整数s1,s2,…,sn——sk指第n+k名骑士发起的挑战。
(1<=fk,sk<=n)

Output

在一行中输出S中骑士的编号。
如果数据存在多组解,你只需任意输出一组。

Sample Input

4

5 6 7 7

1 3 2 3
Sample Output

1 2 4 8

HINT 请不要提交,期待SPJ

因为原图是二分图,所以所有的环都是偶环

因为每个点只有一个出度,所以所有的环都是简单环。

那么这个图可以想象成一个内向基环森林

每次给度为0的节点染色。每遍历到一个点度--

如果将要到达的点度为0或者它的颜色为不可选(因为此点不可选所以不能随便染色),那么继续遍历(博主语死早。。大家自行画图吧。。)

然后把所有没有标记的环搞一遍就可以了

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 500010
using namespace std;
int n;
int to[maxn], h[maxn], cnt, deg[maxn], col[maxn];
void add(int u, int v){to[u] = v, deg[v] ++;} void BFS(int u){
col[u] = 2;
while(true){
if(col[to[u]])break;
deg[to[u]] --;
if(deg[to[u]] == 0 || col[u] == 2){
col[to[u]] = col[u] ^ 1;
u = to[u];
}
else break;
}
} void Col(int u){
col[u] = 2;
while(true){
if(col[to[u]])break;
col[to[u]] = col[u] ^ 1;
u = to[u];
}
} int main(){
scanf("%d", &n);
int v;
for(int i = 1; i <= n; i ++)
scanf("%d", &v), add(i, v); for(int i = n + 1; i <= n * 2; i ++)
scanf("%d", &v), add(i, v);
n <<= 1;
for(int i = 1; i <= n; i ++)
if(!deg[i] && !col[i])BFS(i);
for(int i = 1; i <= n; i ++)
if(!col[i])Col(i);
for(int i = 1; i <= n; i ++)
if(col[i] == 2)printf("%d ", i);
return 0;
}

  

[BZOJ 4436][Cerc2015]Kernel Knights的更多相关文章

  1. UVALive 7334 Kernel Knights (dfs)

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

  2. 【UVALive 7334】Kernel Knights

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

  3. BZOJ 4421: [Cerc2015] Digit Division

    4421: [Cerc2015] Digit Division Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 348  Solved: 202[Subm ...

  4. bzoj 4451 : [Cerc2015]Frightful Formula FFT

    4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 177  Solved: 57[Sub ...

  5. BZOJ 4421: [Cerc2015] Digit Division 排列组合

    4421: [Cerc2015] Digit Division 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4421 Descripti ...

  6. BZOJ 1671: [Usaco2005 Dec]Knights of Ni 骑士 (bfs)

    题目: https://www.lydsy.com/JudgeOnline/problem.php?id=1671 题解: 按题意分别从贝茜和骑士bfs然后meet_in_middle.. 把一个逗号 ...

  7. BZOJ 4435 [Cerc2015]Juice Junctions 分治最小割+hash

    分治最小割的题目,要求n2. 之前用的n3的方法自然不能用了. 于是用hash,设hash[i][j]表示在最小割为i的时候,j是否与S联通. 看懂这个需要理解一下最小割树的构造. 这种题建议用EK写 ...

  8. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士【bfs】

    bfs预处理出每个点s和t的距离d1和d2(无法到达标为inf),然后在若干灌木丛格子(x,y)里取min(d1[x][y]+d2[x][y]) /* 0:贝茜可以通过的空地 1:由于各种原因而不可通 ...

  9. Kernel Knights (Gym - 101480K)

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

随机推荐

  1. linux ls正则表达式

    ls就是默认排序的. 所以: ls只支持通配符,不支持正则,所以单纯用ls是不能实现的. 一些正则过滤操作需要结合支持正则的命令如grep.sed或awk. 例如:ls | grep "[0 ...

  2. Spring源码学习(二)AOP

    ----ProxyFactoryBean这个类,这是AOP使用的入口---- AOP有些特有的概念,如:advisor.advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其 ...

  3. 面向侧面的程序设计AOP-------《三》.Net平台AOP技术概览

    本文转载自张逸:晴窗笔记 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上, ...

  4. html css js

    html 回顾 字体:font 属性: color: 颜色 size: 字号 表格:table 标签: tr:表格中的行 td: 单元行中的单元格 th:通常使用在table中的第一行, 成为表头, ...

  5. Linux删除乱码文件

    2015年2月28日 17:11:54 1.  ls -i  列出文件的inode号 ??Φ-ͦ?+?-ˬͩ-????-??.doc 2.  find folder -inum -delete -de ...

  6. jsp之间传参中文乱码问题

    jsp页面之间传参,传中文会出现乱码问题. 如下: $('.yzjjfa_row').eq(0).append('<a class="yzjjfa_contItem jjfa_acti ...

  7. Bootstrap分页插件:bootstrap-paginator

    今天和大家分享一个Bootstrap的分页插件:bootstrap-paginator. 插件地址: https://github.com/lyonlai/bootstrap-paginator 先看 ...

  8. 传染病控制(codevs 1091)

    题目描述 Description [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未 ...

  9. 昂贵的聘礼(poj 1062)

    Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...

  10. 配置无线网络的时候会提示“Enter Password for Default Keyring to Unlock”

    密钥管理软件Seahorse有关,这个时候我们打开c配置一下就可以解决. 命令行下运行seahorse或依次点击菜单“应用程序→附件→密码和加密密钥”, 在login一行中右键选择更改密码,然后什么都 ...