Submission #1295048

#TimeUsernameProblemLanguageResultExecution timeMemory
1295048nozikaWorld Map (IOI25_worldmap)C++20
15 / 100
13 ms3244 KiB
#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;

map<pair<int,int>,int> used;
vector<int> adj[41];
vector<int> path, seq;

int edge[41][41], vis[41];
int N_nodes, K;



void print_matrix(vector<vector<int>> X){
   
   
    int n = X.size();
    
    
    
    for (int i = 0; i < n; i++){
       
       
        for (int j = 0; j < n; j++) cout << X[i][j] << " ";
      
      
       
       
        cout << endl;
   
   
    }
    system("pause");
}

void dfs_tree(int parent, int node){
   
   
   
   
    int deg = adj[node].size(); 
   
   
    for (int i = 0; i < deg; i++){
    
    
    
        int nxt = adj[node][i];
    
    
        if (nxt != parent) {
    
    
            path.push_back(node);
    
    
            dfs_tree(node, nxt);
    
    
        }
    }
    
    
    if (node != 1) path.push_back(node);
}

void dfs_general(int parent, int node){ 
    vis[node] = 1;
    for (int i = 1; i <= N_nodes; i++)
        if (!vis[i] && edge[node][i] == 1) {
            path.push_back(node);
            dfs_general(node, i); 
        }
    if (node != 1) path.push_back(node);
}

vector<vector<int>> create_map(int N, int M, 
                               vector<int> A, vector<int> B) {

    N_nodes = N;

    if (M == 0) {
        vector<vector<int>> grid(1, vector<int>(1, 1));
     
     
     
        return grid;
    
      
      
    }

    if (M == N - 1) { 
      
        for (int i = 1; i <= N; i++) adj[i].clear();
     
     
     
        for (int i = 0; i < M; i++){
        
        
            adj[A[i]].push_back(B[i]);
       
       
       
            adj[B[i]].push_back(A[i]);
        }
        path.clear();
        dfs_tree(0, 1);

        K = path.size();
        vector<vector<int>> grid(K, vector<int>(K, 1));
        for (int i = 0; i < K; i++)
            for (int j = 0; j < K; j++)
                grid[i][j] = path[j];
        return grid; 
    }

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) edge[i][j] = 0;
        vis[i] = 0;
    }
       
    for (int i = 0; i < M; i++){
        edge[A[i]][B[i]] = 1;
        edge[B[i]][A[i]] = 1;
    }

    path.clear();
    dfs_general(0, 1);  

    seq.clear();
    used.clear();
    for (int i = 1; i <= N_nodes; i++) vis[i] = 0;

    K = path.size();
   
   
    int cnt = 0;


   
   
    for (int i = 0; i < K; i++){  	
      
      
        seq.push_back(path[i]);
     
     
     
        if (vis[path[i]] == 0) {
       
       
       
            seq.push_back(-1);
       
       
            seq.push_back(path[i]);
      
      
            vis[path[i]] = 1;
       
       
       
            cnt++;
     
     
     
            if (cnt == N) break;	
    
    
        }
  
  
  
    }

  
  
  
    K = seq.size();
 
 
   vector<vector<int>> grid(K, vector<int>(K, -1));

  
  
    for (int i = 0; i < K; i++) 
    
    
    
        grid[0][i] = seq[i];
      
  
  
  
    for (int u = 1; u <= N_nodes; u++)
     
     
        for (int v = 1; v < u; v++) 
       
       
       
            if (edge[v][u]) {
            
            
            
                pair<int,int> p = make_pair(v,u);
             
             
             
                if (used[p] == 0){
                
                
                    int col = -1;
                 
                 
                    for (int i = 0; i < K; i++)
                        if (grid[0][i] == v) { col = i + 1; break; }
                 
                 
                    
                
                
                    for (int i = 0; i < K; i++)
                 
                 
                        if (grid[i][col] == -1) {
                  
                  
                  
                            grid[i][col] = u; 
                  
                  
                  
                            grid[i][col - 1] = v;
                 
                 
                            grid[i + 1][col] = v;  	      
                 
                 
                 
                            grid[i + 1][col - 1] = v;  	      
                 
                 
                            break;
                
                
                
                        }
               
               
               
                    used[p] = 1;
          
          
                }
            }
	
    
    
    
    for (int i = 0; i < K; i++)
      
      
      
        for (int j = 0; j < K; j++)    
        
        
            if (grid[i][j] == -1) {
        
        
        
                if (i == 0) grid[i][j] = grid[i][j - 1];
        
        
        
                else        grid[i][j] = grid[i - 1][j]; 
      
      
            }



   
   
    return grid;
}

Compilation message (stderr)

worldmap.cpp: In function 'void print_matrix(std::vector<std::vector<int> >)':
worldmap.cpp:33:11: warning: ignoring return value of 'int system(const char*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |     system("pause");
      |     ~~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...