Description


对于100%的数据,N不超过2000。

Solution


容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄
C++STL中有bitset,用这个当成二进制按位状压即可

一开始错是没有给每个连通分量标记自己包含的点,这样就只算了相同连通分量的贡献。奈何拍的数据太弱,浪费了1h

Code


#include <stdio.h>
#include <string.h>
#include <bitset>
#include <stack>
#include <queue>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
#define fill(x,t) memset(x,t,sizeof(x))
#define min(x,y) ((x)<(y)?(x):(y))
const int N=2025;
const int E=4000005;
std:: stack<int> stack;
std:: bitset<N> vis[N];
struct edge{int x,y,next;}e[E];
bool inStack[N];
int queue[N],head,tail;
int dfn[N],low[N],scc[N];
int ls[N],d[N],n,edCnt=0;
int size[N];
char str[N];
void addEdge(int x,int y) {e[++edCnt]=(edge){x,y,ls[x]};ls[x]=edCnt; d[y]++;
}
void dfs(int now) {dfn[now]=low[now]=++dfn[0];stack.push(now); inStack[now]=1;for (int i=ls[now];i;i=e[i].next) {if (!dfn[e[i].y]) {dfs(e[i].y);low[now]=min(low[now],low[e[i].y]);} else if (dfn[e[i].y]&&inStack[e[i].y]) low[now]=min(low[now],dfn[e[i].y]);}if (dfn[now]==low[now]) {scc[0]++;for (int tmp=0;tmp!=now;) {tmp=stack.top(); stack.pop();inStack[tmp]=0;scc[tmp]=scc[0];size[scc[0]]++;vis[scc[0]][tmp]=1;}}
}
void tarjan() {fill(dfn,0); fill(low,0);fill(inStack,0);rep(i,1,n)if (!dfn[i]) dfs(i);int tmp=edCnt;fill(ls,0); fill(d,0);rep(i,1,tmp) if (scc[e[i].x]!=scc[e[i].y]) {addEdge(scc[e[i].x],scc[e[i].y]);}
}
void top_sort() {head=1,tail=0;rep(i,1,scc[0]) if (!d[i]) {queue[++tail]=i;}int ans=0;while (head<=tail) {int now=queue[head++];ans+=size[now]*size[now];for (int i=ls[now];i;i=e[i].next) {if (!(--d[e[i].y])) queue[++tail]=e[i].y;}}drp(ti,scc[0],1) {int now=queue[ti];for (int i=ls[now];i;i=e[i].next) {vis[now]|=vis[e[i].y];}}rep(i,1,scc[0]) ans+=(vis[i].count()-size[i])*size[i];printf("%d\n", ans);
}
int main(void) {
//  freopen("data.in","r",stdin);
//  freopen("myp.out","w",stdout);scanf("%d",&n);rep(i,1,n) {scanf("%s",str);rep(j,1,n) if (str[j-1]=='1') addEdge(i,j);}tarjan();top_sort();return 0;
}

bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset相关推荐

  1. P2403 [SDOI2010]所驼门王的宝藏(强连通分量)(拓扑排序)

    文章目录 题目描述 解析 代码 洛谷传送门 题目描述 解析 看题目要求很容易想到强连通分量缩点加拓扑dp 但是问题在于存图 第一感就是和暴力和每个点连边 但那样无论点数和边数都很爆炸 随后我们发现这个 ...

  2. Jzoj P4253 QYQ在艾泽拉斯___强连通分量缩点+拓扑序dp

    题目大意: Q Y Q QYQ QYQ有 K K K次技能,每次可以从一个岛屿上闪现到另外一个岛屿上,每一个岛屿只能登上一次. Q Y Q QYQ QYQ能从任何一个城市开始旅程,也能在任何一个城市结 ...

  3. 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。...

    题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...

  4. POJ1236Network of Schools——强连通分量缩点建图

    [题目描述] A number of schools are connected to a computer network. Agreements have been developed among ...

  5. HDU 5934:Boom——强连通分量+缩点

    [题目描述] There are N bombs needing exploding.Each bomb has three attributes: exploding radius ri, posi ...

  6. bzoj2208 [Jsoi2010]连通数

    题目链接 先是强连通分量缩点,然后出来一个DAG 然后就可以DP啦,要找出每个SCC能到达的SCC有哪些 如果直接存一个二维数组来传递闭包的话肯定会TLE对吧 于是我们使用了神奇的bitset就快多了 ...

  7. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  8. bzoj 2330 / AcWing 368 银河 差分约束系统+tarjan缩点+拓扑排序

    怎么最近bzoj一直上不了,莫非是挂了? AcWing的地址:https://www.acwing.com/problem/content/370/ 题意: 银河中的恒星浩如烟海,但是我们只关注那些最 ...

  9. BZOJ2208 [Jsoi2010]连通数

    题目描述: 度量一个有向图连通情况的一个指标是连通,指途中可达点对的个数. 下图的连通数是14 现在要你求出连通数 n<=2000 题解: 网上的题解有的写得很复杂,但是看到n的范围这么小,当然 ...

最新文章

  1. pandas使用sort_index函数按照索引排序对dataframe的数据行进行排序(sort dataframe rows by index)
  2. 搜索引擎, 请手下留情
  3. encodeURIComponent编码2次
  4. 百度陆奇最新内部演讲:人工智能时代,给工程师的5个建议
  5. 那些做了十年的老开发都去哪了?
  6. 介绍一个功能强大的 Visual Studio Code 扩展 - Rest Client,能部分替代 Postman
  7. C# WPF 表单更改提示
  8. Win32动态库 Lib文件哪去了
  9. wxpython使用简介_wxpython简介
  10. linux磁盘管理の进阶篇一
  11. PyQt5-网格布局(QGridLayout)-10
  12. Word转PDF方法(jacob插件)
  13. 网络舆情分析系统具体使用功能及作用详解
  14. NETCTOSS代码实现第二版
  15. 苹果手机如何分享wifi密码_怎样用手机改wifi密码
  16. unity摄像头实物识别_“千万别让女朋友擦倒车摄像头,太tm可怕了哈哈哈哈哈!”...
  17. iphone查看python文件_通过python获取苹果手机备份文件中的照片,视频等信息采集...
  18. 致爱丽丝 之MY收藏
  19. java.lang.IllegalArgumentException: Malformed \uxxxx encoding
  20. 密码库LibTomCrypt学习记录——(2.25)分组密码算法的工作模式——EAX加密认证模式

热门文章

  1. 使用Cisco Packet Tracer之图解PDUs的使用
  2. 直播问题分析总结 -- 花屏绿屏
  3. vue获取当前日期以及前七天日期
  4. 信息安全专业之网络渗透实验
  5. 管理者必需要知道的大作《目标》what is TOC?
  6. android版本过高导致下载软件后无法自动安装
  7. 电子设计教程10:电荷泵倍压输出电路
  8. A Survey of Optimization Methods from a Machine Learning Perspective
  9. [转载]自己编写 php 在线问卷调查程序
  10. 沈向洋谈科研纠错:做好学问要“深揭猛批”