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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Zadanie Konferencja
// Potyczki algorytmiczne 2026
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(NULL); 
  unsigned int n, k, a;
  unsigned int xc, // minimalna liczba uczestn. do obsady kontynuacji
    xn, // minimalna liczba uczestn. do obsady nowych
    xf = 0; // liczba uczestn. niezajętych w danym dniu a zajętych wcześniej
  cin >> k >> n;
  vector<bool> has_cont (n + 1, false); // has_cont[0] niewykorzystana
  for (unsigned int i = 2; i <= k; i++)
  {
    xc = 0, xn = 0;
    cin >> n;
    for (unsigned int j = 1; j <= n; j++)
    {
      cin >> a;
      if (a > 0)
      {
        // j to kontynuacja a
        has_cont[a] = true;
        xc++;
      }
    }
    xn = n - xc;
    
    // Dodać do xf niekontynuowane z poprzedniego dnia
    for (vector<bool>::iterator iter = has_cont.begin(); iter != has_cont.end(); iter++)
      if (!(*iter))
        xf++; 
    xf--; // bez has_cont[0]
    
    // Przydzielić niezajętych uczestn. do nowych spotk.
    if (xf >= xn)
      xf -= xn;
    else
      xf = 0;
    
    // Do następnej iteracji
    has_cont.resize(n + 1);
    for (vector<bool>::iterator iter = has_cont.begin(); iter != has_cont.end(); iter++)
      *iter = false;
  }
  
  cout << xn + xc + xf << endl; // Albo n + xf
  // system("pause"); 
}