| 87 | } |
| 88 | |
| 89 | public static void build(int u, int fa) { |
| 90 | dep[u] = dep[fa] + 1; |
| 91 | stjump[u][0] = fa; |
| 92 | stout[u][0] = ++cntt; |
| 93 | addEdge2(u, cntt, 0); |
| 94 | addEdge2(fa, cntt, 0); |
| 95 | stin[u][0] = ++cntt; |
| 96 | addEdge2(cntt, u, 0); |
| 97 | addEdge2(cntt, fa, 0); |
| 98 | for (int p = 1; p < MAXP; p++) { |
| 99 | stjump[u][p] = stjump[stjump[u][p - 1]][p - 1]; |
| 100 | stout[u][p] = ++cntt; |
| 101 | addEdge2(stout[u][p - 1], cntt, 0); |
| 102 | addEdge2(stout[stjump[u][p - 1]][p - 1], cntt, 0); |
| 103 | stin[u][p] = ++cntt; |
| 104 | addEdge2(cntt, stin[u][p - 1], 0); |
| 105 | addEdge2(cntt, stin[stjump[u][p - 1]][p - 1], 0); |
| 106 | } |
| 107 | for (int e = head1[u]; e > 0; e = next1[e]) { |
| 108 | int v = to1[e]; |
| 109 | if (v != fa) { |
| 110 | build(v, u); |
| 111 | } |
| 112 | } |
| 113 | } |
| 114 | |
| 115 | public static void pathOut(int x, int y, int vnode) { |
| 116 | if (dep[x] < dep[y]) { |