連結串列
定義
struct Peter{
int val;
int nxt,pre;
}node[M];
int idx=0;
初始化
inline void Init() // head:0; tail:n+1
{
node[0]={0,n+1,0};
node[n+1]={0,n+1,0};
return;
}
在 p
後插入 val
inline void insert(int p,int val)
{
node[++idx]={val,node[p].nxt,p};
node[node[p].pre].pre=idx,node[p].nxt=idx;
return;
}
刪除 p
inline void remove(int p)
{
node[node[p].nxt].pre=node[p].pre;
node[node[p].pre].nxt=node[p].nxt;
return;
}
並查集
定義 & 初始化
int fa[N];
void uInit()
{
for(int i=1;i<=n;i++)
fa[i]=i;
return;
}
查詢
int uask(int x)
{
if(fa[x]==x) return fa[x];
else return fa[x]=uask(fa[x]);
}
合併
void merge(int x,int y)
{
fa[ask(y)]=ask(x);
return;
}