小技巧&模板

更改栈空间和内存占用

  • Linux 在当前终端使用

ulimit(-s)栈空间 kbytes,(-t)时间,单位为秒(-v)内存 kbytes,

例如 ulimit -s 262144 -t 1 -v 262144\(1s,256mb\)

  • Windows
    添加编译选项-Wl,--stack=<num>
    -Wl,--stack=268435456 将栈空间确定为 256 MiB

计算一个数的二进制表示有多少位为1

__builtin_popcount()
  • 注意这个是unsigned int类型
__builtin_popcountll()
  • 这个是unsigned long long类型

关闭同步流

ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);

哈希映射,比 \(map\) 快很多

include<ext/pb_ds/assoc_container.hpp>
include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;
gp_hash_table<int,int>bz[1005];

快读

//#define gc() (p1==p2&&(p2=(p1=in)+fread(in,1,1<<20,stdin),p1==p2)?EOF:*p1++)
#define gc() getchar()
inline int read(){
	int x(0),f(1);char ch=gc();
	for(;ch<'0'||ch>'9';ch=gc())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=gc())x=(x<<1)+(x<<3)+(ch^48);
	return x*f;
}

DFS序

void dfs(int s,int f){
	dfn[s]=++id;
	size[s]=1;
	int to;
	for(int i=head[s];i;i=e[i].next){
		to=e[i].to;
		if(to==f)continue;
		dfs(to,s);
		size[s]+=size[to];
	}
	return ;
}

欧拉序

void dfs(int s,int f){
	dfn[++id]=s;
	size[s]=1;
	int to;
	for(int i=head[s];i;i=e[i].next){
		to=e[i].to;
		if(to==f)continue;
		dfs(to,s);
		dfn[++id]=s;//返回时记录
		size[s]+=size[to];
	}
	return ;
}
void dfs(int s,int f){
	dfn[++id]=s;//入栈时记录
	size[s]=1;
	int to;
	for(int i=head[s];i;i=e[i].next){
		to=e[i].to;
		if(to==f)continue;
		dfs(to,s);
		size[s]+=size[to];
	} 
        dfn[++id]=s;//出栈时记录
	return ;
}
posted @ 2023-07-25 15:36  muzqingt  阅读(15)  评论(0编辑  收藏  举报