noip模拟赛 戏
【问题背景】
zhx 和他的妹子(们) 做游戏。
【问题描述】
考虑 N 个人玩一个游戏,任意两个人之间进行一场游戏(共 N*(N-1)/2 场),
且每场一定能分出胜负。
现在, 你需要在其中找到三个人构成“剪刀石头步”局面: 三个人 A, B, C
满足 A 战胜 B, B 战胜 C, C 战胜 A。
【输入格式】
第一行一个正整数 N, 表示参加游戏的人数。
接下来 N 行, 每行 N 个数 0/1,中间没有空格隔开。第 i 行第 j 列数字为 1
表示 i 在游戏中战胜了 j。 所有对角线元素(即第 i 行第 i 个元素) 为 0, 保证数
据合法。
【输出格式】
如果存在三个人构成“剪刀石头布”局面, 输出三个人的编号(从 1 开始)。
如果不存在这样的三个人, 输出一个数-1。
【样例输入】
5
00100
10000
01001
11101
11000
【样例输出】
1 3 2
【数据规模与约定】
分析:今天才知道这种图叫竞赛图,还是第一次接触它.
首先,竞赛图中是没有两元环的,两个点不可能互指.并且竞赛图中一条任意长度的环都可以通过某种变换变成3元环,也就是题目要求的.具体是怎么变换呢?考虑这样一个环:

考虑前3个点1、2、3,如果1、3之间的连边是从3指向1,那么就找到了一个3元环,否则,我们完全可以不考虑2这个点,继续考虑1,3,4,检查1,4的连边,这就和1,2,3这种情况一样了,每次把环的长度-1,由于不存在2元环,所以最后一定可以找到一个三元环.
接下来的任务就是怎么要找到一个任意长度的环.

把dfs走的图看作一棵“树”,如果子节点有边连向祖先,那么就形成了环.将dfs时的vis数组改一下就可以了,vis[i] = 0表示i没有访问过,i=1表示正在访问i或者i的子树,i=2表示i的子树访问完了.如果下一个点vis=1,那么就找到一个环了.维护一个栈,记录一个时间戳,访问到新节点就加入到栈中,子树访问完了就退出来,找到环后就把栈中对应下标的元素一复制就好了.
一个比较重要的思想是把其它的所有不满足条件的情况都给排除掉,一步步接近我们的目标.就好比找3元环,首先证明2元环是不存在的,然后证明大于3元环的一定可以找到3元环,把问题一步步缩小就能找到答案.
#include <map>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, a[][], dfs_clock, s[], time[], head[], to[ * ], nextt[ * ], tot = ;
int vis[], top, ans[], cnt; bool flag = false; void add(int x, int y)
{
to[tot] = y;
nextt[tot] = head[x];
head[x] = tot++;
} void dfs(int u)
{
if (flag)
return;
vis[u] = ;
s[++top] = u;
time[u] = top;
for (int i = head[u]; i; i = nextt[i])
{
int v = to[i];
if (!vis[v])
dfs(v);
if (vis[v] == )
{
flag = ;
for (int j = time[v]; j <= top; j++)
ans[++cnt] = s[j];
return;
}
}
vis[u] = ;
s[top--] = ;
} int main()
{
scanf("%d", &n);
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
{
scanf("%1d", &a[i][j]);
if (a[i][j])
add(i, j);
}
for (int i = ; i <= n; i++)
if (!vis[i])
{
dfs(i);
if (flag)
break;
}
if (!flag)
printf("-1");
else
{
for (int i = ; i < cnt; i++)
if (a[s[i + ]][s[]])
{
printf("%d %d %d\n", s[], s[i], s[i + ]);
break;
}
} return ;
}
noip模拟赛 戏的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- Web Api之Cors跨域(干货)---大家一定要看清我写的内容哦
Web Api之Cors跨域 要想跨域需要准备一下几步骤 1.创建WebAPI(请按照图片先后顺序来) 2.进入NuGet包管理搜 Microsoft.AspNet.WebApi.Cors 进行下载 ...
- Oracle11gR2设置连接数process与会话session值
近日构建的Web应用用户数量有所上升,后台总是打印无法打开数据库连接的错误信息: 000000a3 SystemOut O 9月 ::, ERROR - msg:打开数据库出错. 经查询发现需要更改数 ...
- 数据返回(数据共享,即从后端返回到前端调用,四种(requesst、ModelAndView、Model、Map))
@Controller @RequestMapping("/view")//请求父路径 public class GoodsController { @RequestMapping ...
- C#基础 特殊集合
//stack 干草堆 //先进后出 进 push 出 pop //初始化 //Stack ss = new Stack(); //ss.Push(1); //ss.Push(2); //ss.Pus ...
- 1619. [HEOI2012]采花
1619. [HEOI2012]采花 ★★☆ 输入文件:1flower.in 输出文件:1flower.out 简单对比 时间限制:5 s 内存限制:128 MB [题目描述] 萧薰儿 ...
- c++利用jsoncpp libcurl 构造http 包(原)
我们手游要接入uc九游进行测试,要用http向uc那边的sdk 服务器post json数据. 虽然他们提供了php,java还有c#的服务端demo,但是我们服务器是C++写的,我实在不想中间再转 ...
- esp8266 SOC方案经过半年沉淀之后再度重启
我发誓这是最后一次玩esp8266,该脱坑了...... 以前看不懂的教程 http://club.gizwits.com/thread-6447-1-1.html 2018教程 http://clu ...
- NoSQL与关系数据库
关系型数据库:完全支持关系代数理论作为基础:有较大的数据规模:固定的数据库模式:查询效率快:强一致性:数据完整性较易实现:扩展性一般:可用性好. NoSQL:部分支持关系代数理论作为基础:有超大数据规 ...
- Lazarus 日志工具 MultiLog
MultiLog是一种同时以灵活性和低开销为目标的日志系统.顾名思义,它可用于将日志实例到多个目标,如文本文件.可视控件或其他应用程序.添加新的日志目标使用两个方法就可以实现了,其中一个方法是可选的. ...
- Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout
automaticallyAdjustsScrollViewInsets:在导航栏透明时用到 In your viewDidLoad method, add if([self respondsToSe ...