题意:动态修改图 \(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的更多相关文章

  1. 【hdu6072】Logical Chain

    Kosaraju算法,然後bitset優化 主要是學習一下自寫bitset的姿勢 #include<cstring> #include<algorithm> #include& ...

  2. HDU 6072 Logical Chain(Kosaraju+bitset)

    http://acm.hdu.edu.cn/showproblem.php?pid=6072 题意: 给你$n*n$的矩阵,每次修改k条边,让你计算其中能相互到达的点对有多少. 思路: 其实就是求强连 ...

  3. Linux命令:read

    在shell中,内建(builtin)命令read,格式如下: read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] ...

  4. man bash

    BASH(1) General Commands Manual BASH(1) NAME bash - GNU Bourne-Again SHell SYNOPSIS bash [options] [ ...

  5. bash5.0参考手册

    Bash Reference Manual a.summary-letter { text-decoration: none } blockquote.indentedblock { margin-r ...

  6. [DFNews] Cellebrite UFED Logical/Physical Analyzer 3.8.1 维护性更新

    Maintenance Release             Cellebrite has released a maintenance version of UFED Physical / Log ...

  7. LVM Linear vs Striped Logical Volumes

    转自:https://sysadmincasts.com/episodes/27-lvm-linear-vs-striped-logical-volumes About Episode - Durat ...

  8. 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- ...

  9. PatentTips - Data Plane Packet Processing Tool Chain

    BACKGROUND The present disclosure relates generally to systems and methods for providing a data plan ...

随机推荐

  1. Python之 time 模块

    时间模块的转换关系与方式: #!/usr/bin/env python # -*- coding:utf8 -*- import time # 时间戳 print('\ntime.time() --& ...

  2. 【C++札记】内联函数

    概述 函数的使用使得相同代码不必多次重写,但会带来额外的开销,函数调用的过程中会有入栈和出栈,这些都会消耗时间. 如果一个函数在程序运行过程中被成千上万次调用,那么这个开销也是不容忽视的,C++中引入 ...

  3. PAT(B) 1085 PAT单位排行(Java:20分)

    题目链接:1085 PAT单位排行 (25 point(s)) 题目描述 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式 输入第一行给出一个正整数 N ...

  4. 高仿linux下的ls -l命令——C语言实现

    主要用到的函数可以参考头文件,仅仅支持ls -l这功能,扩展就交给大家了0.0 相关测试图片: ​ ​ 话不多说,直接上码 #include <stdio.h> #include < ...

  5. 消息认证码 - MAC (Message Authentication Code)

    消息认证包括两个目标 1消息完整性认证: 确保张三发给我的消息是完整的,在传输过程中没有被第三方篡改 2消息的来源认证: 确保这个数据是张三发给我的,而不是李四发给我的 第一个目标通常使用散列函数来达 ...

  6. golang ---CPU信息

    package main import ( "fmt" "github.com/StackExchange/wmi" ) type gpuInfo struct ...

  7. 服务端技术选型与考虑(go)

  8. Docker安装带中文全文搜索插件zhparser的Postgresql数据库

    上一篇讲了在已经安装了PG数据库的情况下,安装全文搜索插件zhparser遇到的问题.在一个全新的环境中安装带有全文搜索插件zhparser的PG数据库,可以使用已经做好的Docker镜像,在安装的过 ...

  9. Highcharts曲线展示数据

  10. python逻辑编程之kanren

    https://github.com/logpy/logpy https://pypi.org/project/kanren/ https://www.yiibai.com/ai_with_pytho ...