egogoboy

Доказательство теоремы

Aug 9th, 2022
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4.  
  5. using namespace std;
  6.  
  7. int k = 0;
  8. struct edje {
  9.     int to = 0;
  10.     vector<int> child;
  11.     bool use = false;
  12. };
  13.  
  14. void edje_sort(vector<edje>& mas, vector<int>& weight, int v) {
  15.  
  16.     for (int i = 0; i < mas[v].child.size(); ++i) {
  17.         for (int j = 0; j < mas[v].child.size() - 1; ++j) {
  18.             if (weight[mas[v].child[j]] >= weight[mas[v].child[j + 1]])
  19.                 swap(mas[v].child[j], mas[v].child[j + 1]);
  20.         }
  21.     }
  22.  
  23.     /*for (int i = 0; i < mas[v].child.size() / 2 + mas[v].child.size() % 2; ++i) {
  24.         mas[v].use = true;
  25.     }*/
  26.  
  27. }
  28.  
  29. void dfs(vector<edje>& mas, vector<int>& weight, int v) {
  30.  
  31.     for (int i = 0; i < mas[v].child.size(); ++i) {
  32.         dfs(mas, weight, mas[v].child[i]);
  33.     }
  34.  
  35.     edje_sort(mas, weight, v);
  36.  
  37.     for (int i = 0; i < mas[v].child.size() / 2 + mas[v].child.size() % 2; ++i) {
  38.         weight[v] += weight[mas[v].child[i]];
  39.         mas[mas[v].child[i]].use = true;
  40.     }
  41.     weight[v] += 1;
  42. }
  43.  
  44. void cout_dfs(vector<edje>& mas, vector<int>& f, int v) {
  45.  
  46.     for (int i = 0; i < mas[v].child.size(); ++i) {
  47.         if (mas[mas[v].child[i]].use) {
  48.             cout_dfs(mas, f, mas[v].child[i]);
  49.         }
  50.     }
  51.  
  52.     f.push_back(v);
  53.     ++k;
  54. }
  55.  
  56. int main() {
  57.  
  58.     ifstream fin("input.txt");
  59.     ofstream fout("output.txt");
  60.  
  61.     int n;
  62.     fin >> n;
  63.     vector<edje> mas(n);
  64.     vector<int> weight(n);
  65.     for (int i = 0; i < n; ++i) {
  66.         int j = 0;
  67.         do {
  68.             fin >> j;
  69.             if (j != 0) {
  70.                 mas[i].child.push_back(j - 1);
  71.                 mas[j - 1].to = i;
  72.             }
  73.         } while (j != 0);
  74.     }
  75.  
  76.     dfs(mas, weight, 0);
  77.  
  78.     vector<int> f;
  79.  
  80.     cout_dfs(mas, f, 0);
  81.     fout << k << endl;
  82.  
  83.     for (int i = 0; i < f.size(); ++i) {
  84.         fout << f[i] + 1 << endl;
  85.     }
  86.  
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment