Loading

[笔记] 平面图

转对偶图

  • LidRid 分别是每条边左右的区域的编号;
  • to[x]fr[x] 分别是 \(x\) 指出去和指向 \(x\) 的边 (从左往右排列);
void build(){
	static queue <int> Q;
	Q.push(S);
	while(!Q.empty()){
		int x = Q.front(); Q.pop();
		if(!to[x].size()) continue;
		int a = (int) to[x].size() - 1, b = (int) fr[x].size() - 1;
   Lid[to[x][0].se] = ~b ? Lid[fr[x][0].se] : ++id;
   Rid[to[x][a].se] = ~b ? Rid[fr[x][b].se] : ++id;
		if(x == S) st = Lid[to[x][0].se], ed = Rid[to[x][a].se];
		lfor(i, 1, a) Lid[to[x][i].se] = Rid[to[x][i - 1].se] = ++id;
		lfor(i, 0, a){
			add(Lid[to[x][i].se], Rid[to[x][i].se]);
			if(!(--in[to[x][i].fi])) Q.push(to[x][i].fi);
		}
	}
}
posted @ 2022-02-16 10:44  IrisT  阅读(46)  评论(0编辑  收藏  举报