HDU6072 Logical Chain
题意:动态修改图 \(G\) 的边集,求每次修改后的 \(\sum c\times (c−1) / 2\) (记每个强连通分量中的点数量为 \(c\) )。其中修改操作共 \(m\) 次,每次最多改 \(k\) 条边。\(1≤m≤25000,1≤k≤10\),图 \(G\) 中点数为 \(n\) ,\(1≤n≤250\)。
题解:\(tarjan\)由于要遍历所有边,复杂度 \(\mathcal{O}((V+E)\times m)\),在稠密图中效率较低;而使用邻接矩阵存储边集状态,利用 \(Kosaraju\) 解决的复杂度将达到 \(\mathcal{O}(V^2\times m)\) ,然后可以利用 bitset 优化边集的存储,加速后继点的查找,复杂度 \(\mathcal{O}(\frac{V^2\times M}{32})\)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char s; while(!isdigit(s=getchar())) f=s=='-'?-1:f;
do x=x*10+(s^48); while(isdigit(s=getchar())); return x*f;
} const int B=8,D=5,L=31,N=260;
struct bitset {
unsigned dat[B];
inline void reset() {memset(dat,0,B<<2);}
inline void set() {memset(dat,0xff,B<<2);}
inline void set(int x) {dat[x>>D]|=1u<<(x&L);}
inline void flip(int x) {dat[x>>D]^=1u<<(x&L);}
inline bool test(int x) {return dat[x>>D]>>(x&L)&1;}
}vis,e[N],re[N];
vector<int> s;
int n,m,num,T;
#define u32 unsigned
inline void dfs1(int u) {
vis.flip(u);
for(R i=0;i<B;++i) {
while(20040109) {
register u32 tmp=vis.dat[i]&e[u].dat[i];
if(!tmp) break;
dfs1(i<<D|__builtin_ctz(tmp));
}
} s.push_back(u);
}
inline void dfs2(int u) {
vis.flip(u),++num;
for(R i=0;i<B;++i) {
while(20021204) {
register u32 tmp=vis.dat[i]&re[u].dat[i];
if(!tmp) break;
dfs2(i<<D|__builtin_ctz(tmp));
}
}
}
inline void Kosaraju() {
s.clear(),vis.set(); R ans=0;
for(R i=0;i<n;++i) if(vis.test(i)) dfs1(i);
vis.set(); for(R i=n-1;~i;--i) {
if(vis.test(s[i])) {
num=0;
dfs2(s[i]);
ans+=num*(num-1)/2;
}
} printf("%d\n",ans);
}
inline void main() {
T=g(); while(T--) {
n=g(),m=g();
for(R i=0;i<n;++i) e[i].reset(),re[i].reset();
for(R i=0;i<n;++i) { register char s[N];
scanf("%s",s);
for(R j=0;j<n;++j) if(s[j]=='1')
e[i].flip(j),re[j].flip(i);
}
while(m--) { R t=g();
while(t--) { R u,v;
u=g(),v=g();
e[u-1].flip(v-1),re[v-1].flip(u-1);
} Kosaraju();
}
}
}
} signed main() {Luitaryi::main(); return 0;}
2019.12.18
HDU6072 Logical Chain的更多相关文章
- 【hdu6072】Logical Chain
Kosaraju算法,然後bitset優化 主要是學習一下自寫bitset的姿勢 #include<cstring> #include<algorithm> #include& ...
- HDU 6072 Logical Chain(Kosaraju+bitset)
http://acm.hdu.edu.cn/showproblem.php?pid=6072 题意: 给你$n*n$的矩阵,每次修改k条边,让你计算其中能相互到达的点对有多少. 思路: 其实就是求强连 ...
- Linux命令:read
在shell中,内建(builtin)命令read,格式如下: read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] ...
- man bash
BASH(1) General Commands Manual BASH(1) NAME bash - GNU Bourne-Again SHell SYNOPSIS bash [options] [ ...
- bash5.0参考手册
Bash Reference Manual a.summary-letter { text-decoration: none } blockquote.indentedblock { margin-r ...
- [DFNews] Cellebrite UFED Logical/Physical Analyzer 3.8.1 维护性更新
Maintenance Release Cellebrite has released a maintenance version of UFED Physical / Log ...
- LVM Linear vs Striped Logical Volumes
转自:https://sysadmincasts.com/episodes/27-lvm-linear-vs-striped-logical-volumes About Episode - Durat ...
- Life of an Oracle I/O: tracing logical and physical I/O with systemtap
https://db-blog.web.cern.ch/blog/luca-canali/2014-12-life-oracle-io-tracing-logical-and-physical-io- ...
- PatentTips - Data Plane Packet Processing Tool Chain
BACKGROUND The present disclosure relates generally to systems and methods for providing a data plan ...
随机推荐
- Python 实用第三方库安装方法
下面将自己学习过程中总结的Python第三方库的安装常用三种方法分享给大家,本人推荐前面两种方式.(已安装Python) 方法一:pip命令行直接安装 打开cmd命令窗口,通过命令 pip insta ...
- Feign 失败降级未生效和超时配置优先级问题
一.问题: 生产环境服务A 通过feign调用 服务B,服务A报警信息如下: 详细分析发现问题 (1)服务A调用服务B失败,未触发声明的失败降级操作 (2)同时配置ribbon和feign超时时间,优 ...
- 单实例dg软件从10.2.0.4版本安装至10.2.0.5.12
DG环境搭建需求,因此安装与主库相同的软件版本 1.主库软件版本10.2.0.5.12 2dg环境提供的是全新的10.2.0.4.0 3.安装步骤,安装10.2.0.5 静默安装 psu安装10.2. ...
- C#中关于常用日期的计算
void Main() { DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32( ...
- WebSocket简单使用
很简单就不写太多介绍了,仅展示服务端代码!! Configure在Startup类的方法中添加WebSockets中间件 app.UseWebSockets(); 可以配置以下设置: KeepAliv ...
- angularjs 中的路由 与 bootstrap标签选项卡的冲突 解决方案
当项目中使用了angularjs 的路由,则所有 像a标签的href 的链接都会走路由,实现页面跳转,那么有些地方需要使用选项卡,就会带来麻烦. 路由使用如下图: 某页面需要使用bootstrap的选 ...
- Golang-使用md5对字符串进行加密
方式一: func md5Test1(str string) string { m5 := md5.New() _,err := m5.Write([]byte(str)) if err != nil ...
- z7z8记录
http://www.ypppt.com/ ppt模板地址
- 借助openpyxl处理excel
一次处理excel中,原计划是借助excel中自带的工具进行处理,然而看到需要处理的列要达到30+,后来放弃了,用Python处理或许是一个不错的选择. 需求: 表格中每一列数据都是一个随机值,但是已 ...
- vue 自定义image组件
介绍 1:当图片加载失败时,给出错误提示. 2:当图片加载中时,给出加载提示. 3:图片处理模式:等比缩放/裁剪/填充/... 1.图片加载状态处理 通过给图片绑定load事件与error事件处理函数 ...