| 157 | |
| 158 | // 收集信息迭代版 |
| 159 | public static void dfs2(int cur, int fa, int edg) { |
| 160 | stacksize = 0; |
| 161 | push(cur, fa, edg, -1); |
| 162 | while (stacksize > 0) { |
| 163 | pop(); |
| 164 | if (e == -1) { |
| 165 | nodeCnt[edge]++; |
| 166 | maxEdge = Math.max(maxEdge, edge); |
| 167 | for (int e = headq[u]; e > 0; e = nextq[e]) { |
| 168 | if (dis[e] >= edge) { |
| 169 | needArr[++cnta] = dis[e] - edge; |
| 170 | qidArr[cnta] = qid[e]; |
| 171 | } |
| 172 | } |
| 173 | e = headg[u]; |
| 174 | } else { |
| 175 | e = nextg[e]; |
| 176 | } |
| 177 | if (e != 0) { |
| 178 | push(u, f, edge, e); |
| 179 | int v = tog[e]; |
| 180 | if (v != f && !vis[v]) { |
| 181 | push(tog[e], u, edge + 1, -1); |
| 182 | } |
| 183 | } |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | public static void calc(int u, int edge, int effect) { |
| 188 | cnta = 0; |