Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <deque>
- #include <unordered_map>
- #include <numeric>
- #include <iomanip>
- using namespace std;
- #define pii pair<int, int>
- #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
- const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
- const int dl[2] = {1, -1};
- const int MOD = 1e9;
- const int MAX = 23;
- int n, T;
- vector<int> v[MAX];
- int visited[MAX];
- vector<int> cycle[100005];
- int num_cycle = 0;
- long long bit[100005];
- long long breed_bit[2];
- vector<int> independent[100005];
- vector<int> not_ind[100005];
- vector<int> path;
- void dfs(int cur){
- visited[cur] = 1;
- path.push_back(cur);
- for(auto nxt : v[cur]){
- if(visited[nxt] == 1){
- int idx = -1;
- for(int i = 0; i < path.size(); i++){
- if(path[i] == nxt){
- idx = i;
- }
- }
- if(idx != -1){
- for(int i = idx; i < path.size(); i++){
- cycle[num_cycle].push_back(path[i]);
- }
- num_cycle++;
- }
- }
- else{
- dfs(nxt);
- }
- }
- }
- void print_cycles(){
- for(int i = 0; i < num_cycle; i++){
- cout << "Cycle " << i + 1 << ": ";
- for(auto x : cycle[i]){
- cout << x << " ";
- }
- cout << "\n";
- }
- }
- void bit_cycle(){
- for(int i = 0; i < num_cycle; i++){
- cout << "Cycle: " << i + 1 << ": ";
- for(auto x : cycle[i]){
- bit[i] += (1 << (x - 1));
- }
- cout << bit[i] << "\n";
- }
- }
- void bit_independency(){
- for(int i = 0; i < num_cycle; i++) {
- for (int j = 0; j < num_cycle; j++) {
- if ((bit[i] & bit[j]) == 0) {
- independent[i].push_back(j);
- }
- else{
- not_ind[i].push_back(j);
- }
- }
- cout << independent[i].size() << " ";
- }
- }
- void input1(){
- cin >> n;
- for(int i = 1; i <= n; i++){
- bool ck = false;
- for(int p, j = 1; j <= n; j++){
- cin >> p;
- if(p == i){
- ck = true;
- }
- if(!ck){
- v[i].push_back(p);
- }
- }
- }
- }
- void input2(){
- cin >> T;
- for(int i = 0; i < T; i++){
- string s;
- cin >> s;
- breed_bit[0] = 0;
- breed_bit[1] = 0;
- for(int j = 0; j < s.size(); j++){
- if(s[j] == 'H'){
- breed_bit[0] += (1 << j);
- }
- else{
- breed_bit[1] += (1 << j);
- }
- }
- // need to add how to process each test cases...
- }
- }
- void find_cycle(){
- for(int i = 1; i <= n; i++){
- if(visited[i] == 0){
- path.clear();
- dfs(i);
- }
- }
- }
- int main() {
- FAST;
- //freopen("gravity.in", "r", stdin);
- //freopen("gravity.out", "w", stdout);
- input1();
- input2();
- find_cycle();
- print_cycles();
- bit_cycle();
- bit_independency();
- }
- /*
- 4
- 1 2 3 4
- 1 3 2 4
- 1 2 4 3
- 1 2 3 4
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement