1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| int bfs(int bg) { queue<int> q; memset(d, -1, sizeof(d)); d[bg] = 0, q.push(bg); while (!q.empty()) { int x = q.front(); q.pop(); for (int i = head[x]; i; i = nxt[i]) { int y = ver[i]; if (~d[y]) continue; q.push(y); d[y] = d[x] + edge[i]; id[y] = i; } } int ed = bg; for (int i = 1; i <= n; ++i) { if (d[i] > d[ed]) ed = i; } return ed; }
void route(int p, int q) { while (q != p) { a[++t] = q; b[t + 1] = edge[id[q]]; q = ver[id[q] ^ 1]; } a[++t] = p; }
|