Submission #1120072

#TimeUsernameProblemLanguageResultExecution timeMemory
1120072dowdowBitaro’s Party (JOI18_bitaro)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <stack>
#include <climits>
using namespace std;

class Graph {
public:
    int V;  // Number of vertices
    vector<vector< pair<uint, uint>>> adj;  // adjacency list (pair of vertex and weight)

    Graph(int V) {
        this->V = V;
        adj.resize(V+1);  // Vertex starts from 1 to V, skip index 0
    }

    // Add an edge from u to v with weight w
    void addEdge(int u, int v, int w) {
        adj[u].push_back({v, w});
    }

    // Helper function for topological sort using DFS
    void topologicalSortUtil(int v, vector<bool>& visited, stack<int>& topoStack) {
        visited[v] = true;

        // Recur for all the vertices adjacent to this vertex
        for (auto& neighbor : adj[v]) {
            int u = neighbor.first;
            if (!visited[u]) {
                topologicalSortUtil(u, visited, topoStack);
            }
        }

        // Push current vertex to stack after visiting all its neighbors
        topoStack.push(v);
    }

    // Function to perform topological sort
    stack<int> topologicalSort() {
        vector<bool> visited(V, false);
        stack<int> topoStack;

        // Perform DFS for all unvisited vertices
        for (int i = 0; i < V; i++) {
            if (!visited[i]) {
                topologicalSortUtil(i, visited, topoStack);
            }
        }

        return topoStack;
    }

    // Function to find the longest path in the DAG
    int longestPath(int src, const set<uint>& unattended) {
        // stack<int> topoStack = topologicalSort();
        // cout << src << endl;
        // Initialize distances to all vertices as negative infinity
        vector<int> dist(V, INT_MIN);
        dist[src] = 0;  // Distance to the source is 0

        // Process vertices in topological order from src and above
        //while (!topoStack.empty()) {
        //    int u = topoStack.top();
        //    topoStack.pop();

        for (int i = src; i > 0; i--) {
            int u = i; 
            // cout << u << endl;
            // Update distances for all adjacent vertices of u
            if (dist[u] != INT_MIN) {
                for (auto& neighbor : adj[u]) {
                    int v = neighbor.first;
                    int weight = neighbor.second;
                    if (neighbor.first > src) {
                        continue;
                    }
                    // cout << "Neighbor" << v  << " weight: " << weight<< endl;
                    if (dist[u] + weight > dist[v]) {
                        dist[v] = dist[u] + weight;
                        // cout << "distance[v]: " << dist[v] << endl;
                    }
                }
            }
        }

        // Find the longest path
        int max_dist = -1;
        
        for (int i = 1; i <= src; i++) {
          // cout << i << endl;
          // cout << "unattended size: " << unattended.size() << endl;
          if (unattended.find(i) != unattended.end()) {
            // cout << "unattended: " << i << endl;
            continue;            
          }
          if (dist[i] > max_dist) {
            max_dist = dist[i];
          }
        }
        // cout << "max_dist: " << max_dist << endl;
        return max_dist;
    }
};

class Gathering {
public:
    uint Town; 
    uint number; // # of beavers couldn't come
    set<uint> beavers; // beavers couldn't come

    int max_path;  // longest canal for beavers could come

  Gathering(uint T, uint number) {
    this->Town = T;
    this->number = number;
    this->max_path = -1;
  }

  Gathering(const Gathering& G) {
    this->Town = G.Town;
    this->number = G.number;
    this->max_path = G.max_path;
    this->beavers = G.beavers;  
    // cout << " copy constructor: " << this->beavers.size() << " input: " << G.beavers.size() << endl;
  }

  void addBeaver(uint beaver) {
    beavers.insert(beaver);   
  }
};

class Node {
public:
    int value;
    vector<pair<int, int>> *multi;

    Node(int value) {
        this->value = value;
    }

    vector<pair<int, int>>* pairs() {
        return multi;
    }
};

class Matrix {
private:
    int rows;
    int cols;
    std::vector<std::vector<Node*>> data;
    // std::vector<std::pair<int, int>> multi; // a set of multiples

public:
    // Constructor to initialize a matrix with given rows and columns, and optionally fill with a value
    Matrix(int r, int c) : rows(r), cols(c) {}

    // Copy constructor to create a deep copy of another matrix
    Matrix(const Matrix& other) : rows(other.rows), cols(other.cols), data(other.data) {}

    // Accessor for rows and columns
    int getRows() const { return rows; }
    int getCols() const { return cols; }

    // Element access (with bounds checking)
    Node *at(int r, int c) {
        if (r < 0 || r >= rows || c < 0 || c >= cols) {
            throw std::out_of_range("Index out of bounds");
        }
        return data[r][c];
    }


    // Set data
    void set_at(int r, int c, Node* node) {
        if (r < 0 || r >= rows || c < 0 || c >= cols) {
            throw std::out_of_range("Index out of bounds");
        }
        data[r][c] = node;
    }

    // Display the matrix
    void display() const {
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                std::cout << data[i][j]->value << " ";
            }
            std::cout << std::endl;
        }
    }
};

int main() {
  uint R = 0;
  uint S = 0;
  uint N = 0;
  cin >> R >> S >> N;

   // Add edges: (from, to, weight)
  Matrix matrix(R,S);  // Create a matrix with R*S
  for(int i = 0; i < R; i++) {
    for(int j = 0; j < S; j++) {
        uint value = 0;
        cin >> value;
        Node *node = new Node(value);
        matrix.set_at(i, j, node);
    }
  }

for(int i = S; i > 0; i--) {
    for(int j = R; j > 0; j--) {
        Node *node = matrix.at(i,j);
        if (i < S) {
            Node *right_node = matrix.at(i+1, j);
            for (auto& multi: right_node->pairs()) {
                node->multi.push_back(right_node->pairs());
                node->multi.push_back({i+1, right_node->value});
            }
        }
        if (j < R) {
            Node *down_node = matrix.at(i,j+1);
        }
        for (int k = 0; node->multi.size(); k++) {
            
        
        }
        
    }
}
  


  
  return 0;
}


Compilation message (stderr)

bitaro.cpp: In member function 'int Graph::longestPath(int, const std::set<unsigned int>&)':
bitaro.cpp:75:40: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
   75 |                     if (neighbor.first > src) {
      |                         ~~~~~~~~~~~~~~~^~~~~
bitaro.cpp: In function 'int main()':
bitaro.cpp:201:20: warning: comparison of integer expressions of different signedness: 'int' and 'uint' {aka 'unsigned int'} [-Wsign-compare]
  201 |   for(int i = 0; i < R; i++) {
      |                  ~~^~~
bitaro.cpp:202:22: warning: comparison of integer expressions of different signedness: 'int' and 'uint' {aka 'unsigned int'} [-Wsign-compare]
  202 |     for(int j = 0; j < S; j++) {
      |                    ~~^~~
bitaro.cpp:213:15: warning: comparison of integer expressions of different signedness: 'int' and 'uint' {aka 'unsigned int'} [-Wsign-compare]
  213 |         if (i < S) {
      |             ~~^~~
bitaro.cpp:215:49: error: no matching function for call to 'begin(std::vector<std::pair<int, int> >*&)'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from bitaro.cpp:1:
/usr/include/c++/10/initializer_list:90:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>)'
   90 |     begin(initializer_list<_Tp> __ils) noexcept
      |     ^~~~~
/usr/include/c++/10/initializer_list:90:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'std::initializer_list<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from bitaro.cpp:1:
/usr/include/c++/10/bits/range_access.h:51:5: note: candidate: 'template<class _Container> decltype (__cont.begin()) std::begin(_Container&)'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:51:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.begin()) std::begin(_Container&) [with _Container = std::vector<std::pair<int, int> >*]':
bitaro.cpp:215:49:   required from here
/usr/include/c++/10/bits/range_access.h:51:50: error: request for member 'begin' in '__cont', which is of pointer type 'std::vector<std::pair<int, int> >*' (maybe you meant to use '->' ?)
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |                                           ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note: candidate: 'template<class _Container> decltype (__cont.begin()) std::begin(const _Container&)'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.begin()) std::begin(const _Container&) [with _Container = std::vector<std::pair<int, int> >*]':
bitaro.cpp:215:49:   required from here
/usr/include/c++/10/bits/range_access.h:61:56: error: request for member 'begin' in '__cont', which is of pointer type 'std::vector<std::pair<int, int> >* const' (maybe you meant to use '->' ?)
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |                                                 ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::begin(_Tp (&)[_Nm])'
   90 |     begin(_Tp (&__arr)[_Nm])
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types '_Tp [_Nm]' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from bitaro.cpp:1:
/usr/include/c++/10/valarray:1214:5: note: candidate: 'template<class _Tp> _Tp* std::begin(std::valarray<_Tp>&)'
 1214 |     begin(valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1214:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'std::valarray<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from bitaro.cpp:1:
/usr/include/c++/10/valarray:1224:5: note: candidate: 'template<class _Tp> const _Tp* std::begin(const std::valarray<_Tp>&)'
 1224 |     begin(const valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1224:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'const std::valarray<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
bitaro.cpp:215:49: error: no matching function for call to 'end(std::vector<std::pair<int, int> >*&)'
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from bitaro.cpp:1:
/usr/include/c++/10/initializer_list:101:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::end(std::initializer_list<_Tp>)'
  101 |     end(initializer_list<_Tp> __ils) noexcept
      |     ^~~
/usr/include/c++/10/initializer_list:101:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'std::initializer_list<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from bitaro.cpp:1:
/usr/include/c++/10/bits/range_access.h:71:5: note: candidate: 'template<class _Container> decltype (__cont.end()) std::end(_Container&)'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:71:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.end()) std::end(_Container&) [with _Container = std::vector<std::pair<int, int> >*]':
bitaro.cpp:215:49:   required from here
/usr/include/c++/10/bits/range_access.h:71:48: error: request for member 'end' in '__cont', which is of pointer type 'std::vector<std::pair<int, int> >*' (maybe you meant to use '->' ?)
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |                                         ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:81:5: note: candidate: 'template<class _Container> decltype (__cont.end()) std::end(const _Container&)'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:81:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.end()) std::end(const _Container&) [with _Container = std::vector<std::pair<int, int> >*]':
bitaro.cpp:215:49:   required from here
/usr/include/c++/10/bits/range_access.h:81:54: error: request for member 'end' in '__cont', which is of pointer type 'std::vector<std::pair<int, int> >* const' (maybe you meant to use '->' ?)
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |                                               ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:100:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::end(_Tp (&)[_Nm])'
  100 |     end(_Tp (&__arr)[_Nm])
      |     ^~~
/usr/include/c++/10/bits/range_access.h:100:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types '_Tp [_Nm]' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from bitaro.cpp:1:
/usr/include/c++/10/valarray:1234:5: note: candidate: 'template<class _Tp> _Tp* std::end(std::valarray<_Tp>&)'
 1234 |     end(valarray<_Tp>& __va)
      |     ^~~
/usr/include/c++/10/valarray:1234:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'std::valarray<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from bitaro.cpp:1:
/usr/include/c++/10/valarray:1244:5: note: candidate: 'template<class _Tp> const _Tp* std::end(const std::valarray<_Tp>&)'
 1244 |     end(const valarray<_Tp>& __va)
      |     ^~~
/usr/include/c++/10/valarray:1244:5: note:   template argument deduction/substitution failed:
bitaro.cpp:215:49: note:   mismatched types 'const std::valarray<_Tp>' and 'std::vector<std::pair<int, int> >*'
  215 |             for (auto& multi: right_node->pairs()) {
      |                                                 ^
bitaro.cpp:216:29: error: request for member 'push_back' in 'node->Node::multi', which is of pointer type 'std::vector<std::pair<int, int> >*' (maybe you meant to use '->' ?)
  216 |                 node->multi.push_back(right_node->pairs());
      |                             ^~~~~~~~~
bitaro.cpp:217:29: error: request for member 'push_back' in 'node->Node::multi', which is of pointer type 'std::vector<std::pair<int, int> >*' (maybe you meant to use '->' ?)
  217 |                 node->multi.push_back({i+1, right_node->value});
      |                             ^~~~~~~~~
bitaro.cpp:220:15: warning: comparison of integer expressions of different signedness: 'int' and 'uint' {aka 'unsigned int'} [-Wsign-compare]
  220 |         if (j < R) {
      |             ~~^~~
bitaro.cpp:221:19: warning: unused variable 'down_node' [-Wunused-variable]
  221 |             Node *down_node = matrix.at(i,j+1);
      |                   ^~~~~~~~~
bitaro.cpp:223:37: error: request for member 'size' in 'node->Node::multi', which is of pointer type 'std::vector<std::pair<int, int> >*' (maybe you meant to use '->' ?)
  223 |         for (int k = 0; node->multi.size(); k++) {
      |                                     ^~~~