Advertisement
Vince14

Redistributing Gifts Attempt

Feb 25th, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <set>
  8. #include <map>
  9. #include <stack>
  10. #include <queue>
  11. #include <deque>
  12. #include <unordered_map>
  13. #include <numeric>
  14. #include <iomanip>
  15. using namespace std;
  16. #define pii pair<int, int>
  17. #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
  18. const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
  19. const int dl[2] = {1, -1};
  20. const int MOD = 1e9;
  21. const int MAX = 23;
  22.  
  23.  
  24. int n, T;
  25. vector<int> v[MAX];
  26. int visited[MAX];
  27. vector<int> cycle[100005];
  28. int num_cycle = 0;
  29. long long bit[100005];
  30. long long breed_bit[2];
  31. vector<int> independent[100005];
  32. vector<int> not_ind[100005];
  33.  
  34. vector<int> path;
  35. void dfs(int cur){
  36.     visited[cur] = 1;
  37.     path.push_back(cur);
  38.     for(auto nxt : v[cur]){
  39.         if(visited[nxt] == 1){
  40.             int idx = -1;
  41.             for(int i = 0; i < path.size(); i++){
  42.                 if(path[i] == nxt){
  43.                     idx = i;
  44.                 }
  45.             }
  46.             if(idx != -1){
  47.                 for(int i = idx; i < path.size(); i++){
  48.                     cycle[num_cycle].push_back(path[i]);
  49.                 }
  50.                 num_cycle++;
  51.             }
  52.         }
  53.         else{
  54.             dfs(nxt);
  55.         }
  56.     }
  57. }
  58.  
  59. void print_cycles(){
  60.     for(int i = 0; i < num_cycle; i++){
  61.         cout << "Cycle " << i + 1 << ": ";
  62.         for(auto x : cycle[i]){
  63.             cout << x << " ";
  64.         }
  65.         cout << "\n";
  66.     }
  67. }
  68.  
  69. void bit_cycle(){
  70.     for(int i = 0; i < num_cycle; i++){
  71.         cout << "Cycle: " << i + 1 << ": ";
  72.         for(auto x : cycle[i]){
  73.             bit[i] += (1 << (x - 1));
  74.         }
  75.         cout << bit[i] << "\n";
  76.     }
  77. }
  78.  
  79. void bit_independency(){
  80.     for(int i = 0; i < num_cycle; i++) {
  81.         for (int j = 0; j < num_cycle; j++) {
  82.             if ((bit[i] & bit[j]) == 0) {
  83.                 independent[i].push_back(j);
  84.             }
  85.             else{
  86.                 not_ind[i].push_back(j);
  87.             }
  88.         }
  89.         cout << independent[i].size() << " ";
  90.     }
  91. }
  92.  
  93. void input1(){
  94.     cin >> n;
  95.     for(int i = 1; i <= n; i++){
  96.         bool ck = false;
  97.         for(int p, j = 1; j <= n; j++){
  98.             cin >> p;
  99.             if(p == i){
  100.                 ck = true;
  101.             }
  102.             if(!ck){
  103.                 v[i].push_back(p);
  104.             }
  105.         }
  106.     }
  107. }
  108.  
  109. void input2(){
  110.     cin >> T;
  111.     for(int i = 0; i < T; i++){
  112.         string s;
  113.         cin >> s;
  114.         breed_bit[0] = 0;
  115.         breed_bit[1] = 0;
  116.         for(int j = 0; j < s.size(); j++){
  117.             if(s[j] == 'H'){
  118.                 breed_bit[0] += (1 << j);
  119.             }
  120.             else{
  121.                 breed_bit[1] += (1 << j);
  122.             }
  123.         }
  124.         // need to add how to process each test cases...
  125.     }
  126.  
  127. }
  128.  
  129. void find_cycle(){
  130.     for(int i = 1; i <= n; i++){
  131.         if(visited[i] == 0){
  132.             path.clear();
  133.             dfs(i);
  134.         }
  135.     }
  136. }
  137.  
  138. int main() {
  139.     FAST;
  140.     //freopen("gravity.in", "r", stdin);
  141.     //freopen("gravity.out", "w", stdout);
  142.     input1();
  143.     input2();
  144.     find_cycle();
  145.     print_cycles();
  146.     bit_cycle();
  147.     bit_independency();
  148. }
  149.  
  150. /*
  151. 4
  152. 1 2 3 4
  153. 1 3 2 4
  154. 1 2 4 3
  155. 1 2 3 4
  156.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement