[BZOJ 2208] 连通数
Link:
Solution:
传递闭包模板题
传递闭包是集合中最小的二元关系,其实就是对二元关系的不断拓展,一般用$floyd$求解
这里要先跑一遍$tarjan$求出$SCC$,然后在$TopoSort$时顺便传递闭包,最后统计答案即可
Tips:
1、在$DAG$上递推使用拓扑排序更高效,直接$dfs$时间复杂度没有保证,很可能$TLE$
2、如需对二进制位统一处理(位运算),使用$bitset$,能通过压位快32倍!
3、这题$O(n*m)$和$O(\frac{n^3}{32})$的纯暴力都能过……
Code:
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAXN=;
ll res=;
bool vis[MAXN],instack[MAXN];
vector<int> G[MAXN];char dat[MAXN][MAXN];
int n,in[MAXN],low[MAXN],dfn[MAXN],col[MAXN],sum[MAXN],tp=,cnt=; stack<int> s;
bitset<MAXN> f[MAXN]; void tarjan(int x)
{
dfn[x]=low[x]=++tp;
vis[x]=instack[x]=true;
s.push(x); for(int i=;i<G[x].size();i++)
{
int v=G[x][i];
if(instack[v])
low[x]=min(low[x],low[v]);
else if(!vis[v])
tarjan(v),low[x]=min(low[x],low[v]);
} if(low[x]==dfn[x])
{
int tmp=-;cnt++;
while(tmp!=x)
{
tmp=s.top();s.pop();
instack[tmp]=false;
col[tmp]=cnt;sum[cnt]++;
}
}
} void Topo_sort()
{
for(int i=;i<=cnt;i++) f[i][i]=;
queue<int> q;
for(int i=;i<=cnt;i++) if(!in[i]) q.push(i);
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];f[v]|=f[u];
if(!(--in[v])) q.push(v);
}
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",dat[i]+);
for(int j=;j<=n;j++)
if(dat[i][j]=='') G[i].push_back(j);
} for(int i=;i<=n;i++)
if(!vis[i]) tarjan(i); for(int i=;i<MAXN;i++) G[i].clear();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dat[i][j]=='' && col[i]!=col[j])
G[col[j]].push_back(col[i]),in[col[i]]++; Topo_sort();
for(int i=;i<=cnt;i++)
for(int j=;j<=cnt;j++)
if(f[i][j]) res+=1ll*sum[i]*sum[j]; printf("%lld",res);
return ;
}
[BZOJ 2208] 连通数的更多相关文章
- BZOJ 2208 连通数(强连通分量)
先缩点,对于缩完点后的DAG,可以直接在每个scc dfs一次就可以求出终点是这个scc的点的点对个数. # include <cstdio> # include <cstring& ...
- BZOJ 2208: [Jsoi2010]连通数 tarjan bitset
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- BZOJ 2208: [Jsoi2010]连通数( DFS )
n只有2000,直接DFS就可以过了... -------------------------------------------------------------------------- #in ...
- bzoj 2208 [Jsoi2010]连通数
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MB Description Input 输入数据第一行是图顶点的数量,一个正整数N ...
- Dfs【p4306(bzoj 2208)】 [JSOI2010]连通数
Description 度量一个有向图恋情情况的一个指标是连通,指途中可达点对的个数. 下图的连通数是14 现在要你求出连通数 Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每 ...
- BZOJ.2208.[JSOI2010]连通数(bitset Tarjan 拓扑)
题目链接 先缩点,对于scc之间贡献即为szscc[i]*szscc[j] 用f[i][j]表示scci是否能到sccj 拓扑排序,每次把now的f或上to的f 用bitset优化 //63888kb ...
- bzoj 2208: [Jsoi2010]连通数【tarjan+拓扑+dp】
我总觉得枚举点bfs也行-- tarjan缩点,记一下每个scc的size,bitset压一下scc里的点,然后按拓扑倒序向上合并到达状态,然后加ans的时候记得乘size #include<i ...
- BZOJ 2208 JSOI2010 连通数 Tarjan+拓扑排序
题目大意:给定一个n个点的有向图,求有多少点对(x,y),使x沿边可到达y 设f[i][j]为从i到j是否可达 首先强联通分量中的随意两个点均可达 于是我们利用Tarjan缩点 缩点之后是一个拓扑图. ...
- 8月清北学堂培训 Day5
今天是杨思祺老师的讲授~ 最短路练习题: POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...
随机推荐
- [NOIP2002] 字串变换 宽搜+深度优化
这道题硬是让我用STL水过.......而且题解里说的什么双向宽搜,交替扩展............... 这道题反正,STL用就用吧,但是状态数可以卡到千亿级别,因为这个东西是阶乘扩展的,然后我们发 ...
- 【BZOJ 1901】Zju2112 Dynamic Rankings &&【COGS 257】动态排名系统 树状数组套线段树
外面是树状数组,里面是动态开点线段树,对于查询我们先把有关点找出来,然后一起在线段树上行走,这样就是单个O(log2)的了 #include <cstdio> #include <v ...
- [bzoj 2733]启发式合并权值线段树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2733 平衡树待学习.从一个博客学到了合并权值线段树的姿势:http://blog.csdn ...
- Java实现十进制数转十六进制数
Now~Let's begin our second question~ 如何利用Java语言将十进制数字转换成十六进制数字呢? 我第一次编码出来的效果是酱紫的~ /** * */ package c ...
- CSS3学习之radial-gradient(径向渐变)
转自:http://www.cnblogs.com/rainman/p/5133685.html 1.语法 径向渐变不同于线性渐变,线性渐变是从“一个方向”向“另一个方向”的颜色渐变,而径向渐变是从“ ...
- 前端面试:提升web性能
1,减少HTTP请求数 A,从设计实现层简化页面 B,合理设置HTTP缓存 C,资源合并与压缩.如果可以的话,尽可能的将外部脚本,央视进行合并,多个合为一,css,javascript,image都可 ...
- jspersonft有关Table数据绑定(一)
一:前言 在公司来就学着做报表,觉得这个报表学着还是很有意义的.jspersonft我在网上搜了一些有关的资料但是不是很多,现在就是学一点就记载一点.好记性不如烂笔头嘛! 二:在jspersonft定 ...
- 好几次的CSS存档
第一次: #site_nav_under { display: none; } .c_ad_block, .ad_text_commentbox { display: none; margin:; p ...
- 2017年上海金马五校程序设计竞赛:Problem A : STEED Cards (STL全排列函数)
Description Corn does not participate the STEED contest, but he is interested in the word "STEE ...
- webstorm es6 语法报错
设置settings javascript language version后 <script>标签加个 type <script type="text/ecmascrip ...