BZOJ从入门到入土

技术BZOJ从入门到入土 BZOJ从入门到入土[Jsoi2010]连通数:有向图求每一个点到能到达的点的个数的和(包括自己到自己)SCC+bitset+dp
#includebits/stdc++.h

传送门从入门到入土

[Jsoi2010]连通数:有向图求每一个点到能到达的点的个数的和(包括自己到自己)

SCC+bitset+dp

#包括ebit/stdc .h

使用命名空间标准;

//方法:SCC位集传递闭包或直接位集合优化弗洛伊德

/**

* 1.强连通分量板子复习

* 2.强连通分量缩点重建图复习

* 3.利用位集合求传递闭包(更快,因为可以直接按位或)

* 4.位集合优化弗洛伊德

*/

vectornt h[2010];//原图的邻接表

//tarjan需要的变量

stackint stk

int dfn[2010],low[2010],instk[2010],idx

int SCC[2010],cnt//每一个点所在的单路调节器(单通道控制器)编号、SCC的个数

int SIZE[2010];//每一个单路调节器(单通道控制器)中包含的点数

向量scc[2010年];//新图的邻接表

bit set 2010g[2010];//用于求新图的传递闭包的位集合对于每一个点开一个位集,传递闭包直接或

void tar Jan(int u){ 0

dfn[u]=低[u]=idx;

instk[u]=1;

STK。push(u);

适用于(自动j : h[u]){

if(!dfn[j]){

塔尔扬(j);

low[u]=min(low[u],low[j]);

}else if(instk[j] dfn[j] low[u])

低[u]=dfn[j];

}

如果(低[u]==dfn[u])

碳纳米管;

int num=0;

做{

数量;

int t=STK。top();

SCC[t]=CNT;

instk[t]=0;

STK。pop();

if(t==u)break;

} while(1);

尺寸=数量;//当前单路调节器(单通道控制器)中包含的点数

}

}

bitset 2010 DFS(int u){ 0

if(g[u]!=0)返回g[u];

g[u][u]=1;

适用于(auto v : scc[u]){

g[u]|=DFS(v);

}

返回g[u];

}

void solve(){ 0

int n;

CIN;

//建立原图的邻接表

for(int I=0;I n;I){ 0

for(int j=0;j n;j ){

char c;

CIN c;

if(c=='1') h[i].push _ back(j);

}

}

//SCC

for(int I=0;I n;(一)

if(dfn[I]==0)tar Jan(I);

//重建图,需要遍历所有边

for(int I=0;I n;I){ 0

for(int j=0;j . h . I .size();j ){

if(SCC[i]!=SCC[h[i][j]]) scc[SCC[i]].push _ back(SCC[h[I][j]]);

}

}

int ans=0;

for(int I=1;i=cnti ){ //SCC是从一开始编号的

auto k=DFS(I);//求从我出发能到达的点的位集合

for(int j=1;j=cntj ) //遍历位集合

if(k[j])

ans=SIZE[I]* SIZE[j];

}

标准输出和恩德尔

}

签名main(){ 0

solve();

}

bitset+floyd

#包括ebit/stdc .h

使用命名空间标准;

bit set 2010g[2010];

void solve(){ 0

int n;

CIN;

for(int I=0;I n;I){ 0

字符串s;

宫颈癌前病变的;

反转(s.begin()、s . end());

g[I]=bit set 2010(s);

g[I][I]=1;

}

for(int k=0;k n;k)

for(int I=0;I n;(一)

if(g[I][k])g[I]|=g[k];

int ans=0;

for(int I=0;I n;I){ 0

ans=g[i].count();

}

标准输出和恩德尔

}

签名main(){ 0

solve();

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124350.html

(0)

相关推荐

  • 垂直平分线怎么画,直线的垂直平分线怎么画

    技术垂直平分线怎么画,直线的垂直平分线怎么画直线没有端点,向两端无限延长,长度无法度量,所以直线是没有办法画出垂直平分线的,只有两端有端点的线段才可以画出垂直平分线。线段的垂直平分线的画法垂直平分线怎么画:
    1、首先在白

    生活 2021年10月26日
  • 如何进行linux后台运行及关闭和查看后台任务

    技术如何进行linux后台运行及关闭和查看后台任务这篇文章将为大家详细讲解有关如何进行linux后台运行及关闭和查看后台任务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    攻略 2021年10月22日
  • 外部css样式表的作用是什么

    技术外部css样式表的作用是什么本篇内容主要讲解“外部css样式表的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“外部css样式表的作用是什么”吧!

    攻略 2021年11月3日
  • redis中的五种基本类型(redis的几种类型分别适用什么场景)

    技术redis层级结构是怎样的本篇内容主要讲解“redis层级结构是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis层级结构是怎样的”吧!redis中保存数据时

    攻略 2021年12月23日
  • 信息安全的基本属性有哪些

    技术信息安全的基本属性有哪些这篇文章主要讲解了“信息安全的基本属性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“信息安全的基本属性有哪些”吧!

    攻略 2021年11月9日
  • 将来时态的5种句型,写出五个将来时和过去时的句子

    技术将来时态的5种句型,写出五个将来时和过去时的句子首先厘清时态的概念将来时态的5种句型,时和态是分开的。时,分为现在,过去,将来,过去将来。一共四个时。态,分为一般,进行,完成,完成进行。一共四个态。
    虚拟语气的本质就

    生活 2021年10月20日