打比赛的时候sb了,用了一个似乎原本可以不用的东西来找环。。。

首先,根据题意,我们可以连成一张图,而蛇能不能回到自己的家, 只需要在一个环上就行了。

问题是怎么找环,我用了 Tarjan。。。

具体做法是每个强连通的大小如果不为 \(1\),就把这个强连通的大小计入答案。

还有就是记得清空。

code:

#include<cstdio>
const int M=3e5+5;
struct Edge{
int to;Edge*nx;
}e[M<<1],*h[M],*cnt=e;
int n,ans,dfc,top,is[M],stk[M],low[M],dfn[M];
inline void Add(const int&u,const int&v){
*cnt=(Edge){v,h[u]};h[u]=cnt++;
}
inline int min(const int&a,const int&b){
return a>b?b:a;
}
void Tarjan(int u){
is[stk[++top]=u]=true;
low[u]=dfn[u]=++dfc;
for(Edge*E=h[u];E;E=E->nx){
int v=E->to;
if(!dfn[v]){
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(is[v])low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
int v,siz=0;
do is[v=stk[top--]]=0,++siz; while(v!=u);
if(siz>1)ans+=siz;
}
}
signed main(){
int T,i;char s;
scanf("%d",&T);
while(T--){
scanf("%d",&n);getchar();
for(i=1;i<=n;++i){
h[i]=NULL;
low[i]=dfn[i]=0;
}
top=dfc=ans=0;
for(i=1;i<=n;++i){
s=getchar();
if(s=='<')Add(i%n+1,i);
else if(s=='>')Add(i,i%n+1);
else Add(i,i%n+1),Add(i%n+1,i);
}
getchar();
for(i=1;i<=n;++i)if(!dfn[i])Tarjan(i);
printf("%d\n",ans);
}
}

CF1428B题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. iOS 小技巧总结

    1.获取准确的app启动所需时间 应用启动时间长短对用户第一次体验至关重要,同时系统对应用的启动.恢复等状态的运行时间也有严格要求,在应用超时的情况下系统会直接关闭应用.以下是几个常见场景下系统对Ap ...

  2. Hibernate与JDBC事务整合

    一般大家都会使用Spring声明型事务 transactionAttributes 为 PROPAGATION_REQUIRED Hibernate 使用 HibernateTransactionMa ...

  3. JabRef

    # JabRef 下载 https://www.fosshub.com/JabRef.html # JabRef 安装 自己更改下目录直接安装接可以了 # 新建自己的库, 然后点击保存就可以了. # ...

  4. Spring IOC-基于注解配置的容器

    Spring中提供了基于注解来配置bean的容器,即AnnotationConfigApplicationContext 1. 开始 先看看在Spring家族中,AnnotationConfigApp ...

  5. Kinect v2 + WPF获取RGB与Depth图像

    date: 2017-09-04 14:51:07 Kinect V2的Depth传感器采用的是「Time of Flight(TOF)」的方式, 通过从投射的红外线反射后返回的时间来取得Depth信 ...

  6. Solution Set -「LOCAL」冲刺省选 Round XXI

    \(\mathscr{Summary}\)   省选几个小时啊,怎么模拟赛只打三个小时啊./kk   时间安排较为合理,没有出现严重的因思考时间过少引起的丢分.   A 题比较可惜,二分 + 点分治大 ...

  7. Solution -「CF 1025D」Recovering BST

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   ...

  8. 用 Beep 函数让主板“唱”《生日歌》

    用 Beep 函数,让你的主板也会"唱歌".Beep 可以通过控制主板扬声器的发声频率和节拍来演奏美妙的旋律.本文就通过C#演示,调用Beep函数,演奏生日快乐歌.首先我们来看下 ...

  9. SpringBoot 自定义MessageConvert

    创建一个MessageConvert类,实现HttpMessageConvert接口 简单实现,只完成写功能.其他默认false package com.boot.converter; import ...

  10. 2.go-GIN快速入门

    一.go mod安装 1.为什么要安装go mod 在项目中需要某个依赖包,必须使用go get安装,否则运行go run main.go会报错.这种方式在依赖包较多时不便于管理,于是在go1.11版 ...