Advertisement
RaFiN_

Trips cf-1037E

Jul 4th, 2020
1,009
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. //Trips cf-1037E
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std ;
  5.  
  6.  
  7. const int N = 2e5 + 4 ;
  8. set <int> G[N] ;
  9.  
  10. struct data {
  11.     int u , v ;
  12. }edge[N];
  13.  
  14.  
  15. int marked[N] ;
  16. int deg[N] ;
  17. int res[N] ;
  18.  
  19. int main () {
  20.     int n , m , k ;
  21.     cin >> n >> m >> k ;
  22.     for (int i = 1 ; i <= m ; i++) {
  23.         scanf("%d %d" , &edge[i].u,&edge[i].v) ;
  24.         G[edge[i].u].insert(edge[i].v) ;
  25.         G[edge[i].v].insert(edge[i].u) ;
  26.     }
  27.  
  28.     vector <int> useless ;
  29.     int ans = n ;
  30.     for (int i = 1 ; i <= n ; i++) {
  31.         if (G[i].size() < k) {
  32.             marked[i] = 1 ;
  33.             ans-- ;
  34.             useless.push_back(i) ;
  35.         }
  36.     }
  37.  
  38.     for (int i = m ; i >= 1 ; i--) {
  39.         while(useless.size() > 0) {
  40.             int u = useless.back() ;
  41.             useless.pop_back() ;
  42.             for (auto v : G[u]) {
  43.                 G[v].erase(u) ;
  44.                 if (marked[v] == 0 and G[v].size() < k) {
  45.                     useless.push_back(v) ;
  46.                     marked[v] = 1 ;
  47.                     ans-- ;
  48.                 }
  49.             }
  50.             G[u].clear() ;
  51.         }
  52.  
  53.         res[i] = ans ;
  54.         int u = edge[i].u , v = edge[i].v ;
  55.  
  56.         if (marked[u] or marked[v]) continue ;
  57.         G[u].erase(v) ;
  58.         G[v].erase(u) ;
  59.         if (G[u].size() < k) {
  60.             useless.push_back(u) ;
  61.             ans-- ;
  62.             marked[u] = 1 ;
  63.         }
  64.         if (G[v].size() < k) {
  65.             useless.push_back(v) ;
  66.             ans-- ;
  67.             marked[v] = 1;
  68.         }
  69.     }
  70.  
  71.     for (int i = 1 ; i <= m ; i++) printf ("%d\n" , res[i]) ;
  72.  
  73.     return 0 ;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement