复习一下手工 tarjan

#include <bits/stdc++.h>
using namespace std; vector <int> g[2005],scc[2005];
int ind,f[2005],siz[2005],dfn[2005],low[2005],vis[2005],s[2005],bel[2005],top,tot,n,m,t1,t2,t3;
char ch[2005];
void dfs(int p) {
vis[p]=1;
s[++top]=p;
dfn[p]=low[p]=++ind;
for(int i=0;i<g[p].size();i++) {
int q=g[p][i];
if(vis[q]==0) dfs(q), low[p]=min(low[p],low[q]);
else if(vis[q]==1) low[p]=min(low[p],dfn[q]);
}
if(dfn[p]==low[p]) {
++tot;
int q=s[top--];
while(q && q-p) {
scc[tot].push_back(q);
bel[q]=tot;
q=s[top--];
}
if(q) {
scc[tot].push_back(q);
bel[q]=tot;
--top;
}
}
vis[p]=2;
} vector <int> G[2005]; int main() {
cin>>n;
for(int i=1;i<=n;i++) {
cin>>ch+1;
for(int j=1;j<=n;j++) {
if(ch[j]=='1') g[i].push_back(j);
}
}
for(int i=1;i<=n;i++) {
if(vis[i]==0) {
dfs(i);
}
}
for(int i=1;i<=tot;i++) {
for(int j=0;j<scc[i].size();j++) {
G[i].push_back(bel[scc[i][j]]);
}
}
for(int i=1;i<=tot;i++) {
siz[i]=scc[i].size();
for(int j=0;j<G[i].size();j++)
if(i-G[i][j]) siz[i]+=siz[G[i][j]];
}
int ans = 0;
for(int i=1;i<=tot;i++) ans+=scc[i].size()*siz[i];
cout<<ans<<endl;
}

[JSOI2010] 连通数 - 强连通分量,缩点的更多相关文章

  1. POJ1236Network of Schools[强连通分量|缩点]

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16571   Accepted: 65 ...

  2. POJ1236Network of Schools(强连通分量 + 缩点)

    题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...

  3. HD2767Proving Equivalences(有向图强连通分量+缩点)

    题目链接 题意:有n个节点的图,现在给出了m个边,问最小加多少边是的图是强连通的 分析:首先找到强连通分量,然后把每一个强连通分量缩成一个点,然后就得到了一个DAG.接下来,设有a个节点(每个节点对应 ...

  4. UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)

    题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...

  5. ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)

    题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...

  6. POJ2553 The Bottom of a Graph(强连通分量+缩点)

    题目是问,一个有向图有多少个点v满足∀w∈V:(v→w)⇒(w→v). 把图的强连通分量缩点,那么答案显然就是所有出度为0的点. 用Tarjan找强连通分量: #include<cstdio&g ...

  7. uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=25&page=sh ...

  8. poj 2762 Going from u to v or from v to u?(强连通分量+缩点重构图+拓扑排序)

    http://poj.org/problem?id=2762 Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit:  ...

  9. tarjan算法(强连通分量 + 强连通分量缩点 + 桥(割边) + 割点 + LCA)

    这篇文章是从网络上总结各方经验 以及 自己找的一些例题的算法模板,主要是用于自己的日后的模板总结以后防失忆常看看的, 写的也是自己能看懂即可. tarjan算法的功能很强大, 可以用来求解强连通分量, ...

随机推荐

  1. 05.JS函数

    前言: 学习一门编程语言的基本步骤(01)了解背景知识(02)搭建开发环境(03)语法规范(04)常量和变量(05)数据类型(06)数据类型转换(07)运算符(08)逻辑结构(09)函数9.函数——f ...

  2. 获取Data和Log默认路径

    使用SERVERPROPERTY()来得到Data和Log的默认路径: InstanceDefaultDataPath和InstanceDefaultLogPath分别返回默认数据和日志目录. DEC ...

  3. 02-flink时间语义 与 Window 基础概念与实现原理

    Flink 多种时间语义对比 Flink 在流应用程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time.下面我们一起来看看 ...

  4. mutations.js文件书写规范及模板调用此文件书写方法

    1)mutations.js代码如下 const mutations={ add(state){ state.count++ }, reduce(state){ state.count-- } } 2 ...

  5. Percona Xtrabackup 备份工具

    生成备份 $ xtrabackup --backup --target-dir=/data/backups/ 注:--target-dir可以放在my.cnf配置文件中.如果指定的目录不存在,xtra ...

  6. 证明task线程是来源于线程池的,线程重用

    1.线程池是单例的,全局唯一的,设置线程池最大活跃线程数是5,设置后,允许同时并发的Task只有5个,我们开启100个task去做任务,从最后的输出结果看到,虽然开启了100个task,但是线程id始 ...

  7. docker - apt-get更换国内源解决Dockerfile构建速度过慢

    背景 使用ubuntu镜像一般apt-get源地址都是在国外导致在构建时因为源地址问题导致下载速度极其得慢 在构建中应事先修改apt-get源地址来避免因下载速度过慢导致的构建缓慢问题 方案 在Doc ...

  8. 纪中5日T1 1564. 旅游

    1564. 旅游 题目描述 输入N个数,从中选择一些出来计算出总和,问有多少种选法使得和为质数. 输入 第一行一个整数N. 第二行N个整数,表示这N个数的值. 输出 一个整数,表示方案数. 样例输入 ...

  9. React网络请求跨域代理设置

    之前的之所以可以请求其他域名下的网络数据,是因为我们在服务端设置了相关配置,如下所示 如果将其注释掉,再次测试,如下所示 此时便无法跨域操作,接下来介绍下React如何实现跨域代理 (1)分析 Rea ...

  10. NODEJS 使用 sqlite3 本地文件数据库

    npm install sqlite3 var sqlite3 = require('sqlite3').verbose();var db = new sqlite3.Database('WebFil ...