【bzoj2208】[Jsoi2010]连通数】的更多相关文章

连通数 bzoj-2208 Jsoi-2010 题目大意:给定一个n个节点的有向图,问每个节点可以到达的点的个数和. 注释:$1\le n\le 2000$. 想法:网上有好多tarjan+拓扑序dp的... 我们考虑暴力怎么做:显然就是用floyd的warshall求出连通矩阵,然后扫矩阵即可. 发现这个过程可以使用bitset进行优化,复杂度为$O(\frac{n^3}{32})$. 最后,附上丑陋的代码... ... #include <bits/stdc++.h> using name…
2208: [Jsoi2010]连通数 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1879  Solved: 778[Submit][Status][Discuss] Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图的连通数. Sample Input 3 010 001 100 Sample…
Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图的连通数. Sample Input 3 010 001 100 Sample Output 9 HINT 对于100%的数据,N不超过2000. Source 第一轮 Solution 好好的暴力不写去写什么算法 虽然我也是学算法学傻了的,前两天看到一道题说这不是莫队裸题吗,然后其实前缀和就行了…
Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图的连通数. Sample Input 3 010 001 100 Sample Output 9 HINT 对于100%的数据,N不超过2000. Solution 数据太水,对于每个点爆搜就能过 Code #include<iostream> #include<cstring> #i…
题目 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 输入样例 3 010 001 100 输出样例 9 提示 对于100%的数据,N不超过2000. 题解 今晚水的题有点多...[明天要会考涨涨信心] N才2000,可以O(n2) 那从每个点出发跑一遍bfs看看能到哪些点就好了 #include<iostream> #include<cstdio>…
题目传送门 题目描述 度量一个有向图连通情况的一个指标是连通数,指图中可达顶点对的个数. 在上图中,顶点1可以到达1.2.3.4.5. 顶点2可以到达2.3.4.5. 顶点3可以到达3.4.5. 顶点4.5均只能到达自身,所以它的连通数为14. 请编写一个程序,输入一个图,求它的连通数. 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 样例 样例输入: 30100…
tarjan缩点后拓扑排序,每一个点用一个bitset记录哪些点能到达它. PS:数据太水,暴力能过. #include<bits/stdc++.h> using namespace std; #define N 2010 struct edge{ edge* s; int v; }e[N*N*2],*back=e,*h[N]; int low[N],num[N],scc[N],size[N]; int now; void tarjan(int u){ static int cnt; stat…
题意 题目链接 Sol 数据水的一批,\(O(n^3)\)暴力可过 实际上只要bitset优化一下floyd复杂度就是对的了(\(O(\frac{n^3}{32})\)) 还可以缩点之后bitset维护一下连通性,然后对每个联通块之间的分别算,复杂度是\(O(\frac{nm}{32})\)(好像和上面的没区别...) 上面代码是floyed 下面的是tarjan // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace…
传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了.(尽管时间复杂度是假的O(n3/32)" role="presentation" style="position: relative;">O(n3/32)O(n3/32)) 代码: #include<bits/stdc++.h> using namespace std; bitset<2005>f[2005]; int ans=0,n; char…
两次dfs缩点,然后n次dfs暴搜. #include<cstdio> #include<vector> #include<cstring> using namespace std; #define N 2001 vector<int>G[N],rG[N],vs,G2[N]; typedef vector<int>::iterator ITER; ][N+]; int cmp[N],sum,cnt[N],ans,n; bool vis[N]; v…