Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<stdio.h>const int up=0;const int left=1;const int down=2;const int right=3;inline int turn(int direct){switch(direct){case up:return down;case down:return up;case left:return right;case right:return left;}}struct Unit{Unit* links[4];Unit(){for(int i=0;i<4;++i)links[i]=NULL;}void insert(Unit* node, int direct){int back=turn(direct);node->links[direct]=links[direct];node->links[back]=this;links[direct]->links[back]=node;links[direct]=node;}void cut(){for(int i=0;i<4;++i){int back=turn(i);links[i]->links[back]=links[back];}}