【hdu6072】Logical Chain
Kosaraju算法,然後bitset優化
主要是學習一下自寫bitset的姿勢
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define dow(i,l,r) for(int i=r;i>=l;i--)
#define rep0(i,r) for(int i=0;i<r;i++)
#define repedge(i,x) for(int i=cur[x];i>=0;i=e[i].next)
#define maxn 550
#define maxm 100100
#define LL long long
using namespace std; int tot,p[maxn],n,m,kk;
char s[maxn]; struct Bitset{
unsigned int v[];
void reset() //clear
{
memset(v,,sizeof(v));
}
void set(int x) //set v[x]=1
{
v[x>>]|=1u<<(x&);
}
void flip(int x) // rev
{
v[x>>]^=1u<<(x&);
}
bool ask(int x) // is == 1?
{
return v[x>>]>>(x&)&;
}
}vis,g[maxn],rg[maxn];
//vis[] =1 not vis,=0 vis
//g[i][j] =1 exist i->j,=0 not exist
//rg[i][j] =1 exist j->i,=0 not exist; void add(int j,int k)
{
g[j].flip(k);
rg[k].flip(j);
} int nlz(unsigned int x)
{
int n;
n = ;
if ((x >> ) == ) {n = n +; x = x <<;}
if ((x >> ) == ) {n = n + ; x = x << ;}
if ((x >> ) == ) {n = n + ; x = x << ;}
if ((x >> ) == ) {n = n + ; x = x << ;}
n = n - (x >> );
return -n;
} void dfs0(int x)
{
vis.flip(x);
rep0(i,) {
unsigned int now=vis.v[i]&g[x].v[i];
while (now) {
dfs0(i<<|nlz(now));
now=vis.v[i]&g[x].v[i];
}
}
p[++tot]=x;
} void dfs1(int x)
{
vis.flip(x);
++tot;
rep0(i,) {
unsigned int now=vis.v[i]&rg[x].v[i];
while (now) {
dfs1(i<<|nlz(now));
now=vis.v[i]&rg[x].v[i];
}
}
} int calc()
{
vis.reset();
rep0(i,n) vis.set(i);
tot=;
rep0(i,n)
if (vis.ask(i)) dfs0(i);
rep0(i,n) vis.set(i);
int ans=;
dow(i,,n)
if (vis.ask(p[i])) {
tot=;
dfs1(p[i]);
ans+=tot*(tot-)/;
}
return ans;
} int main()
{
int tt;
scanf("%d",&tt);
while (tt--) {
scanf("%d %d",&n,&m);
rep0(i,n) {
g[i].reset();
rg[i].reset();
}
rep0(i,n) {
scanf("%s",s);
rep0(j,n)
if (s[j]=='') add(i,j);
}
while (m--) {
scanf("%d",&kk);
while (kk--) {
int j,k;
scanf("%d %d",&j,&k);
add(j-,k-);
}
printf("%d\n",calc());
}
}
return ;
}
另外是一個總結
Bitset
头文件:#include<bitset>
bitset<> bits;
b.any() b中是否存在置为1的二进制位?
b.none() b中不存在置为1的二进制位吗?
b.count() b中置为1的二进制位的个数
b.size() b中二进制位数的个数
b[pos] 访问b中在pos处二进制位
b.test(pos) b中在pos处的二进制位置为1么?
b.set() 把b中所有二进制位都置为1
b.set(pos) 把b中在pos处的二进制位置为1
b.reset( ) 把b中所有二进制位都置为0
b.reset( pos ) 把b中在pos处的二进制位置置为0
b.flip( ) 把b中所有二进制位逐位取反
b.flip( pos ) 把b中在pos处的二进制位取反
b.to_ulong( ) 把b中同样的二进制位返回一个unsigned int __builtin_ffs (unsigned x) 返回x中最后一个1是从右往左第几位
int __builtin_popcount (unsigned x) 返回x中1的个数
int __builtin_ctz (unsigned x) 返回x末尾0的个数(x等于0时未定义)
int __builtin_clz (unsigned x) 返回x中前导0的个数(x等于0时未定义)
int __builtin_parity (unsigned x) 返回x中1的奇偶性
【hdu6072】Logical Chain的更多相关文章
- 【HDU 5233】Tree chain problem (树形DP+树剖+线段树|树状数组)最大权不相交树链集
		
[题目] Tree chain problem Problem Description Coco has a tree, whose vertices are conveniently labeled ...
 - 【HDU3487】【splay分裂合并】Play with Chain
		
Problem Description YaoYao is fond of playing his chains. He has a chain containing n diamonds on it ...
 - 【CodeForces】913 E. Logical Expression
		
[题目]E. Logical Expression [题意]令x=11110000(2),y=11001100(2),z=10101010(2),n次询问,每次要求用[与][或][非][括号]构成含至 ...
 - 【POJ 2248】 Addition Chain
		
[题目链接] http://poj.org/problem?id=2248 [算法] 搜索剪枝 剪枝1 : 优化搜索顺序,从大到小枚举 剪枝2 : Ai + Aj可能相等,只需搜一次即可 剪枝3 : ...
 - 【例题 6-3 UVA - 442】Matrix Chain Multiplication
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用栈来处理一下表达式就好. 因为括号是一定匹配的.所以简单很多. ab x bc会做abc次乘法. [代码] #include< ...
 - OpenStack-Neutron-Fwaas-代码【一】
		
Kilo的代码中对Fwaas做了优化,可以将规则应用到单个路由上 但是juno里面还是应用到租户的所有路由上的,因此对juno的代码做了修改 1. 介绍 在FWaaS中,一个租户可以创建多个防火墙,而 ...
 - 【译】Android API 规范
		
[译]Android API 规范 译者按: 修改R代码遇到Lint tool的报错,搜到了这篇文档,aosp仓库地址:Android API Guidelines. 58e9b5f Project ...
 - 论文阅读(Xiang Bai——【CVPR2012】Detecting Texts of Arbitrary Orientations in Natural Images)
		
Xiang Bai--[CVPR2012]Detecting Texts of Arbitrary Orientations in Natural Images 目录 作者和相关链接 方法概括 方法细 ...
 - 【初级】linux pwd 命令详解及使用方法实战
		
pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...
 
随机推荐
- iOS 影音新格式 HEIF HEVC
			
苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频.照片的大小. 一.简介 HEVC全称 High Efficiency Video ...
 - 变态的iis10
			
IIS10发布网站不能使用.NET4.0需要重新注册在之前版本的系统中使用如下命令可以直接重新注册: 但是windowsServer2016(iis 10) 使用该命令 提示 版本不支持 C:\WIN ...
 - 【jQuery学习】用JavaScript写一个输出多选框的个数报错:Cannot set property 'onclick' of null"
			
说明:代码段来源于:<锋利的jQuery> 根据代码段我补充的代码如下: <!DOCTYPE html> <html> <head> <meta ...
 - global中捕获异常
			
前言:由于现在日志非常重要,但是在哪里打写日志比较好呢,我选择的是在global中,把错误代码网上抛,而不是在底层写大量的try catch然后在catch中来写日志,每个catch中的写日志这样就会 ...
 - shell loop
			
#!/bin/sh date i=0 while [ $i -le 30 ] do echi $i /usr/sbin/r2/np_test_acl -f rule.txt i=$(e ...
 - bootstrap form样式及数据提交
			
1.基本form布局 想要把form表单弄成两列的表格样式,奈何前端不太懂,记录下样式便于下次使用. form-group :增加盒子的下边界 form-control: 充满整个父元素,并且有换行作 ...
 - 纯CSS3实现旋转木马
			
test.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
 - windows更改MySQL存储路径
			
在C:\ProgramData\MySQL\MySQL Server 5.7文件夹 my.ini是默认的配置文件.在这里我们只更改数据存储路径.不更改配置文件 1 # Path to the data ...
 - shell基础 -- 基本正则表达式
			
正则表达式(Regular Expression,通常简称为 regex 或 RE)是一种表达方式,可以用它来查找匹配特定准则的文本.在许多编程语言中都有用到正则表达式,常用它来实现一些复杂的匹配.这 ...
 - 性能测试持续集成(Jenkins+Ant+Jmeter)
			
一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.Jmeter:http://jme ...