| 140 | } |
| 141 | |
| 142 | public static void pathIn(int x, int y, int vnode) { |
| 143 | if (dep[x] < dep[y]) { |
| 144 | int tmp = x; |
| 145 | x = y; |
| 146 | y = tmp; |
| 147 | } |
| 148 | addEdge2(vnode, y, 0); |
| 149 | for (int p = MAXP - 1; p >= 0; p--) { |
| 150 | if (dep[stjump[x][p]] >= dep[y]) { |
| 151 | addEdge2(vnode, stin[x][p], 0); |
| 152 | x = stjump[x][p]; |
| 153 | } |
| 154 | } |
| 155 | if (x == y) { |
| 156 | return; |
| 157 | } |
| 158 | for (int p = MAXP - 1; p >= 0; p--) { |
| 159 | if (stjump[x][p] != stjump[y][p]) { |
| 160 | addEdge2(vnode, stin[x][p], 0); |
| 161 | addEdge2(vnode, stin[y][p], 0); |
| 162 | x = stjump[x][p]; |
| 163 | y = stjump[y][p]; |
| 164 | } |
| 165 | } |
| 166 | addEdge2(vnode, stin[x][0], 0); |
| 167 | } |
| 168 | |
| 169 | public static void pathToPath(int a, int b, int c, int d, int w) { |
| 170 | int x = ++cntt; |