bzoj2208 [Jsoi2010]连通数
题目链接
先是强连通分量缩点,然后出来一个DAG
然后就可以DP啦,要找出每个SCC能到达的SCC有哪些
如果直接存一个二维数组来传递闭包的话肯定会TLE对吧
于是我们使用了神奇的bitset就快多了
1 #include<cstdio> 2 #include<cstdlib> 3 #include<iostream> 4 #include<bitset> 5 #include<set> 6 #include<map> 7 #include<queue> 8 #include<stack> 9 #include<cmath> 10 #include<algorithm> 11 #include<string> 12 #include<string> 13 #define re(i,l,r) for(int i=(l);i<=(r);i++) 14 #define rre(i,l,r) for(int i=(l);i>=(r);i--) 15 using namespace std; 16 void inin(int &x) 17 { 18 x=0;int f=0;char ch=getchar(); 19 while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();} 20 while(ch>='0'&&ch<='9')x*=10,x+=ch-'0',ch=getchar(); 21 x=f?-x:x; 22 } 23 int head[2020],next[4000040],zhi[4000040],s[2020]; 24 int head2[2020],next2[4000040],zhi2[4000040]; 25 int low[2020],dfn[2020],sccno[20020],tot,sum,ed; 26 void add(int a,int b) 27 { 28 next[++ed]=head[a],head[a]=ed,zhi[ed]=b; 29 } 30 int r[2020]; 31 void add2(int a,int b) 32 { 33 next2[++ed]=head2[a],head2[a]=ed,zhi2[ed]=b,r[b]++; 34 } 35 stack<int>h; 36 void dfs(int u) 37 { 38 dfn[u]=low[u]=++tot; 39 h.push(u); 40 for(int i=head[u];i;i=next[i]) 41 { 42 int v=zhi[i]; 43 if(!dfn[v])dfs(v),low[u]=min(low[u],low[v]); 44 else if(!sccno[v])low[u]=min(low[u],dfn[v]); 45 } 46 if(low[u]==dfn[u]) 47 { 48 sum++; 49 while(1) 50 { 51 int x=h.top();h.pop(); 52 sccno[x]=sum; 53 s[sum]++; 54 if(x==u)break; 55 } 56 } 57 } 58 int n,mm[2020][2020]; 59 void rebuild() 60 { 61 ed=0; 62 re(i,1,n)for(int j=head[i];j;j=next[j]) 63 if(sccno[i]!=sccno[zhi[j]]&&!mm[sccno[i]][sccno[zhi[j]]]) 64 add2(sccno[i],sccno[zhi[j]]),mm[sccno[i]][sccno[zhi[j]]]=1; 65 } 66 queue<int>hh; 67 bitset<2020> dp[2020]; 68 int main() 69 { 70 freopen("in.in","r",stdin); 71 freopen("out.out","w",stdout); 72 inin(n); 73 char ss[2020]; 74 re(i,1,n) 75 { 76 scanf("%s",ss+1); 77 re(j,1,n)if(ss[j]=='1')add(i,j); 78 } 79 re(i,1,n)if(!dfn[i])dfs(i); 80 rebuild();int ans=0; 81 re(i,1,sum){if(!r[i])hh.push(i);dp[i][i]=1;} 82 while(!hh.empty()) 83 { 84 int x=hh.front();hh.pop(); 85 for(int i=head2[x];i;i=next2[i]) 86 { 87 r[zhi2[i]]--;dp[zhi2[i]]|=dp[x]; 88 if(!r[zhi2[i]])hh.push(zhi2[i]); 89 } 90 } 91 re(i,1,sum) 92 { 93 int u=0; 94 re(j,1,sum)if(dp[i][j]==1)u+=s[j]; 95 ans+=s[i]*u; 96 } 97 printf( "%d\n",ans); 98 return 0; 99 }
转载于:https://www.cnblogs.com/HugeGun/p/5176225.html
bzoj2208 [Jsoi2010]连通数相关推荐
- BZOJ2208 [Jsoi2010]连通数
题目描述: 度量一个有向图连通情况的一个指标是连通,指途中可达点对的个数. 下图的连通数是14 现在要你求出连通数 n<=2000 题解: 网上的题解有的写得很复杂,但是看到n的范围这么小,当然 ...
- [bzoj2208][Jsoi2010]连通数
一道传递闭包裸题.tarjan+拓扑dp也很强而且貌似更快.本来想写的. 然而查题解的时候发现一个博主的一句话引起了我的共鸣. bzoj上这道题rank前面都是1500B+的大佬,很快,几百ms,到了 ...
- [BZOJ2208]:[Jsoi2010]连通数(暴力 or bitset or 塔尖?)
题目传送门 题目描述 度量一个有向图连通情况的一个指标是连通数,指图中可达顶点对的个数. 在上图中,顶点1可以到达1.2.3.4.5. 顶点2可以到达2.3.4.5. 顶点3可以到达3.4.5. 顶点 ...
- bzoj2208: [Jsoi2010]连通数
补写. 学了学用bitset优化floyd,做这题比用强联通缩点+DP方便多了. bitset具体就是一串编码,比如说定义bitset<2100>b,b就是一个2100位的01串. 由于位 ...
- bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset
Description 对于100%的数据,N不超过2000. Solution 容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄 C++STL中有bitset,用这个当成二进制按位状压即 ...
- bzoj2208:[Jsoi2010]连通数
http://blog.csdn.net/u013598409/article/details/47037499 里面似乎有生成数据的... //我本来的想法是tarjan缩点之后然后将图遍历一遍就可 ...
- 2208: [Jsoi2010]连通数
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1371 Solved: 557 [Submit][Stat ...
- BZOJ 2208[Jsoi2010]连通数
题面: 2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 3100 Solved: 1347 [Submit] ...
- 2208: [Jsoi2010]连通数(Trajan+bitset)
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 2929 Solved: 1280 [Submit][Sta ...
最新文章
- 【JavaScript】请求数据时,添加时间戳,避免浏览器缓存
- 趣读:程序员泪流满面的20个瞬间!
- /proc 虚拟文件系统(实例)
- vue 项目文件介绍
- 什么是暗物质?有没有理科大神解答一下啊?
- 开课吧学python靠谱吗-开课吧成为CNCC中国计算机大会唯一教育合作伙伴
- Windows/Ubuntu 使用小技巧记录
- 输入阻抗和输出阻抗的理解
- 照片怎么转PDF格式?这两个方法快来学习下
- Spring(六)——声明式事物控制
- 张磊:什么才是企业真正的护城河
- pvr格式的用什么打开_cocos2d 查看pvr图片的详细格式
- 使用validate注解做校验以及自定义validate注解
- actran安装教程linux,Linux平台Actran软件安装
- 简单的学生成绩管理系统
- python皮卡丘字符打印代码,python画皮卡丘的代码
- 72、公安网络视频监控系统解决方案
- 齐岳|聚乙二醇-四氧化三铁-二氢卟吩纳米复合物Fe3O4-PEG-Ce6|肝靶向功能的四氧化三铁Fe3O4纳米粒子
- 电路基础知识之什么是共模电感/共模信号/差分信号?
- 使用计算机对炼钢过程进行,转炉炼钢计算机数采监控技术及应用
热门文章
- ubuntu安装sublime3并配置python3环境
- 计算机辅助语言和语言学关系,西方语言学与多媒体计算机辅助语言学习_王艳萍...
- Javascript内部类
- mysql中limit关键字_【JAVA】关于mysql的limit关键字使用。
- python运维开发_Python自动化运维开发----基础(一)
- mybatisplus查询今天的数据_Spring系列——MybatisPlus
- 深度卷积神经网络_深度卷积神经网络中的降采样
- java 调度etl_Easy Scheduler是一个工作流调度系统,主要解决数据研发ETL错综复杂的依赖关系...
- linux下升级zookeeper
- java使用monkeyrunner_MonkeyRunner 实践----用 java 来编写脚本