博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信息传递 vijos1979 NOIP2015D1T2 强连通分量 tarjan模版题
阅读量:6516 次
发布时间:2019-06-24

本文共 1524 字,大约阅读时间需要 5 分钟。

这道题是一个裸的强连通分量的题(最短路也可以解这道题)

把每个同学看成一个点,信息的传递就是在他们之间连有向边,游戏最小轮数就是求最小环。

用强连通分量做,有一个坑点,就是当某个联通分量的大小为1的时候,不能把它算作答案(我因为这个点被坑了,WA到怀疑人生) 

我们不用记录强连通的并查集,我们只记录所有分量的大小即可。剩下的就是tarjan的事情了。

 

附上AC代码

#include
#include
#include
#include
#include
#include
using namespace std;template
inline void read(T &_a){ bool f=0;int _ch=getchar();_a=0; while(_ch<'0' || _ch>'9'){ if(_ch=='-')f=1;_ch=getchar();} while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();} if(f)_a=-_a;}const int maxn=200001;int n,egcnt,head[maxn],dfn[maxn],low[maxn],idx,stk[maxn],stkcnt,sz[maxn],becnt;bool ins[maxn];struct edge{ int to,next;}w[maxn];void tarjan(int u){ dfn[u]=low[u]=++idx; stk[++stkcnt]=u; ins[u]=true; for (register int i=head[u];i;i=w[i].next) { if(!dfn[w[i].to]) { tarjan(w[i].to); low[u]=min(low[u],low[w[i].to]); } else if(ins[w[i].to]) low[u]=min(low[u],dfn[w[i].to]); } if(dfn[u]==low[u]) { ++becnt; while(stk[stkcnt]!=u) { ins[stk[stkcnt]]=false; --stkcnt; ++sz[becnt]; } ins[u]=false; --stkcnt; ++sz[becnt]; }}inline void addedge(int from,int to){ w[++egcnt].to=to; w[egcnt].next=head[from]; head[from]=egcnt;}int main(){ read(n); for (register int i=1,a;i<=n;++i) read(a),addedge(i,a); for (register int i=1;i<=n;++i) if(!dfn[i]) tarjan(i); int ans=0x7fffffff; for (register int i=1;i<=becnt;++i) if(sz[i]!=1) ans=min(ans,sz[i]); printf("%d",ans); return 0;}

 

转载于:https://www.cnblogs.com/jaywang/p/7750988.html

你可能感兴趣的文章
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Java编程的逻辑 (44) - 剖析TreeSet
查看>>
address元素
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>