【问题背景】
      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
【数据规模与约定】
     对于50%的数据,1 ≤n≤ 500。
     对于80%的数据,1 ≤n≤ 1000。
     对于100%的数据,1 ≤n≤ 5000。

啦啦啦第一次直接n3暴力了
正解:
     由于这是一个竞赛图,每两个点之间有且仅有一条有向边,所以当我们找到一个任意长度的环时,考虑这个环上的前三个点A,B,C,若C与A之间的边由C指向A,则找到一个三元环,否则从A指向C有一条边,在这个环上删去B,加上C->A的边,就得到了一个点数少一个的环。
     下面只需考虑如何找一个任意长度的环:对图进行dfs,以v数组存下每个点的遍历状态,0表示没有访问过,1表示访问过但从这个点延伸出的路径上的点还没有访问完,2表示已经访问过这个点及它延伸出的路径上所有的点。这样当我们在dfs中发现又扩展到一个状态为1的点,就找到了一个环。

 program game(input,output);
var
a:array[..,..]of boolean;
f,v,s:array[..]of longint;
c:char;
i,j,n,m,t:longint;
procedure work;
begin
for i:= to m>> do begin t:=f[i];f[i]:=f[m-i+];f[m-i+]:=t; end;
j:=;
for i:= to m do if f[i]<f[j] then j:=i;
for i:= to m do begin t:=i+j-;if t>m then t:=t-m;v[i]:=f[t]; end;
for i:= to m do f[i]:=v[i];
//writeln(m);
//for i:= to m do writeln(f[i]);
for i:= to m do
if a[f[i],f[]] then begin write(f[],' ',f[i-],' ',f[i]);close(input);close(output);halt; end;
end;
procedure dfs(k,d:longint);
var
i:longint;
begin
v[k]:=;
s[d]:=k;
for i:= to n do if a[k,i] then
begin
if v[i]= then continue;
if v[i]= then
begin
m:=;f[]:=i;j:=d;
while s[j]<>i do begin inc(m);f[m]:=s[j];dec(j); end;
work;
end;
dfs(i,d+);
end;
v[k]:=;
end;
begin
assign(input,'game.in');assign(output,'game.out');reset(input);rewrite(output);
readln(n);
for i:= to n do begin for j:= to n do begin read(c);if c='' then a[i,j]:=true else a[i,j]:=false; end;readln; end;
for i:= to n do if v[i]= then dfs(i,);
write(-);
close(input);close(output);
end.

noip模拟题《戏》game的更多相关文章

  1. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  4. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  5. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

  6. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  7. NOIP 模拟题

    目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...

  8. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

  9. 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

随机推荐

  1. Firefox+Burpsuite抓包配置(可抓取https)

    0x00 以前一直用的是火狐的autoproxy代理插件配合burpsuite抓包 但是最近经常碰到开了代理却抓不到包的情况 就换了Chrome的SwitchyOmega插件抓包 但是火狐不能抓包的问 ...

  2. 20155333 2016-2017-2 《Java程序设计》第十周学习总结

    20155333 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络概览 两台计算机用于通信的语言叫做"协议".我们只需关心应用层中的协 ...

  3. 16、Java并发编程:Timer和TimerTask

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  4. cogs2109 [NOIP2015] 运输计划

    cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...

  5. [vijos1067]Warcraft III 守望者的烦恼

    就是上次考得fyfy.竟然是原题... // It is made by XZZ #include<cstdio> #include<algorithm> #include&l ...

  6. java 多路分发

    1.概念 一个函数处理多种类型,其实和多态差不多. 但是要处理两种或者多种类型的数据时,就需要判断每种类型以及每种类型所对应的处理.(PS:我只是在走别人的老路,网上一搜这种概念,博客一大堆,我不知道 ...

  7. [二读]The Art of Pompeii's Influence on Neo-Classicism

    The Art of Pompeii's Influence on Neo-Classicism The discovery of Pompeii's ruins in 1599 profoundly ...

  8. Linux文件归档和解压缩

    1.tar tar命令相当于归档,不做压缩,解压同样也是把归档文件释放出来(归档通俗上可以理解为把文件分类,把一些文件放到一个包中归类,方便用户管理) 解包:tar -zxvf file.tar #解 ...

  9. Python序列之字符串 (str)

    作者博文地址:http://www.cnblogs.com/spiritman/ Python字符串的常用操作包括以下但不限于以下操作: 字符串的替换.删除.切片.复制.连接.比较.查找.分割等 以下 ...

  10. ecshop以及一些需要注意的

    Deprecated: Assigning the return value of new by reference is deprecated in 定位到出错的那一行: $this->_ol ...