DuongNhi99

TREEREDBLACK

Mar 29th, 2021 (edited)
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int INF = 1e9 + 7;
  5. const int N = 105;
  6.  
  7. int n, m;
  8. bool a[N];
  9. int graph[N][N];
  10.  
  11. int d[N][N];
  12.  
  13. void Floyd() {
  14.     for (int i = 1; i <= n; ++i)
  15.         for (int j = 1; j <= n; ++j)
  16.             if (i != j)
  17.                 d[i][j] = graph[i][j];
  18.    
  19.  
  20.     for (int k = 1; k <= n; ++k)
  21.         for (int i = 1; i <= n; ++i)
  22.             for (int j = 1; j <= n; ++j)
  23.                 d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  24. }
  25.  
  26. void solve() {
  27.     cin >> n >> m;
  28.     for (int i = 1; i <= n; ++i)
  29.         cin >> a[i];
  30.        
  31.     for (int i = 1; i <= n; ++i)
  32.         for (int j = 1; j <= n; ++j)
  33.             graph[i][j] = INF;
  34.     for (int i = 1; i < n; ++i) {
  35.         int u, v; cin >> u >> v;
  36.         graph[u][v] = graph[v][u] = 1;
  37.     }
  38.    
  39.     Floyd();
  40.    
  41.     int ans = n;
  42.     if (m == 2) {
  43.         for (int i = 1; i <= n; ++i) {
  44.             for (int j = 1; j <= n; ++j) {
  45.                 if (i != j && a[i] && a[j])
  46.                     ans = min(ans, d[i][j]);
  47.             }
  48.         }
  49.        
  50.         cout << ans << '\n';
  51.     } else {
  52.         for (int i = 1; i <= n; ++i) {
  53.             for (int j = 1; j <= n; ++j) {
  54.                 if (!a[i] || !a[j])
  55.                     continue;
  56.            
  57.                 int inc = 0, mx = d[i][j];
  58.                 for (int k = 1; k <= n; ++k) {
  59.                     if (!a[k]) continue;
  60.                    
  61.                     if (d[i][k] <= mx && d[k][j] <= mx) ++inc;
  62.                 }
  63.                
  64.                 if (inc >= m)
  65.                     ans = min(ans, mx);
  66.             }
  67.         }
  68.        
  69.         cout << ans << '\n';
  70.     }
  71.    
  72.  
  73.     return;
  74. }
  75.  
  76. int main() {
  77.     ios_base::sync_with_stdio(false);
  78.     cin.tie(NULL);
  79.  
  80.     solve();
  81.  
  82.     return 0;
  83. }
  84.  
Add Comment
Please, Sign In to add comment