Skip to content

Commit fe7b2c6

Browse files
committed
changes
1 parent c97b519 commit fe7b2c6

1 file changed

Lines changed: 24 additions & 22 deletions

File tree

graph-theory.md

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2725,35 +2725,37 @@ vector<int> findDiameter(pii &pointA, pii &pointB)
27252725
![Here we are finding length \(edges\), we can generally find nodes and subtract it by 1](.gitbook/assets/image%20%2894%29.png)
27262726
27272727
```cpp
2728-
const int MAXN = 1e5;
27292728
int n;
2730-
vector<int> adj[MAXN+1];
2731-
int source[MAXN+1], dist[MAXN+1], secondMaxDist[MAXN+1];
2732-
int DFS(int u = 0, int par = -1)
2729+
vector<vector<int>> adj;
2730+
vector<int> dist;
2731+
void dfs(int u, int par = -1)
27332732
{
2734-
int mx = 0, pt = -1, secondMx = 0;
2735-
for (auto &v : adj[u])
2733+
for (const int v : adj[u])
27362734
{
27372735
if (v == par) continue;
2738-
int cur = DFS(v, u);
2739-
if (cur > mx) mx = cur, pt = v;
2740-
else if (cur > secondMx) secondMx = cur;
2736+
dist[v] = dist[u]+1;
2737+
dfs(v, u);
27412738
}
2742-
source[u] = pt, dist[u] = mx+1, secondMaxDist[u] = secondMx+1;
2743-
return mx+1;
27442739
}
2745-
int DFS2(int u = 0, int par = -1)
2740+
vector<int> allLongestPath()
27462741
{
2747-
if (par != -1)
2748-
{
2749-
dist[u] = max(dist[u], (source[par] == u) ? secondMaxDist[par]+1 : dist[par]+1);
2750-
if (dist[u] == dist[par]+1 || dist[u] == secondMaxDist[par]+1) source[u] = par;
2751-
}
2752-
for (auto &v : adj[u])
2753-
{
2754-
if (v == par) continue;
2755-
DFS2(v, u);
2756-
}
2742+
vector<int> res(n+1, 0);
2743+
dfs(1);
2744+
2745+
int optimal = 0;
2746+
for (int i = 1; i <= n; ++i)
2747+
if (dist[i] > dist[optimal]) optimal = i;
2748+
fill(dist.begin(), dist.end(), 0);
2749+
dfs(optimal);
2750+
for (int i = 1; i <= n; ++i) res[i] = dist[i];
2751+
2752+
for (int i = 1; i <= n; ++i)
2753+
if (dist[i] > dist[optimal]) optimal = i;
2754+
fill(dist.begin(), dist.end(), 0);
2755+
dfs(optimal);
2756+
for (int i = 1; i <= n; ++i) res[i] = max(res[i], dist[i]);
2757+
2758+
return res;
27572759
}
27582760
```
27592761

0 commit comments

Comments
 (0)