Advertisement
skaram

Untitled

Nov 5th, 2023 (edited)
569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.60 KB | None | 0 0
  1. int dfs(int v, int p, int c);
  2.  
  3. int dfs1(int v, int p, int c) {
  4.     if (tm[v]) {
  5.         dfs(v, -1, 0);
  6.         return 1;
  7.     }
  8.     int t;
  9.     for (int &u : g[v])
  10.         if (nr[u] == nr[v])
  11.             t = dfs1(u, v, c + 1), dp[v] += dp[u];
  12.     for (int& u : g[v]) {
  13.         if (nr[u] != -1 && nr[u] != nr[v])
  14.             dfs1(u, -1, min(t, c)), dp[v] += dp[u];
  15.     }
  16.     return t + 1;
  17. }
  18.  
  19. int dfs(int v = 0, int p = -1, int c = 0) {
  20.     if (p != -1 && sz(g[v]) == 1) {
  21.         dp[v] = 0;
  22.         return 1;
  23.     }
  24.     int t = 1e10;
  25.     if (tm[v])
  26.         t = 0;
  27.     for (int& u : g[v]) {
  28.         if (nr[u] == -1)
  29.             continue;
  30.         dfs1(u, -1, t);
  31.         dp[v] += dp[u];
  32.     }
  33.     return t + 1;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement