Submission #763307

#TimeUsernameProblemLanguageResultExecution timeMemory
763307vjudge1Power Plant (JOI20_power)C++14
Compilation error
0 ms0 KiB
#include <iostream> #include <vector> #include <cstring> using namespace std; vector<vector<int>> graph; // Đồ thị lưu kết nối giữa các căn cứ vector<bool> hasGenerator; // Mảng lưu trạng thái có máy phát điện hay không vector<bool> visited; // Mảng lưu trạng thái đã thăm của các căn cứ int profit = 0; // Biến lưu tổng lợi nhuận // Hàm DFS để duyệt đồ thị và tính lợi nhuận tối đa void dfs(int node, bool isBroken) { visited[node] = true; // Nếu căn cứ hiện tại có máy phát điện và không hỏng if (hasGenerator[node] && !isBroken) { profit++; isBroken = true; // Đánh dấu máy phát điện bị hỏng } // Duyệt qua tất cả các căn cứ kề với căn cứ hiện tại for (int i = 0; i < graph[node].size(); i++) { int neighbor = graph[node][i]; if (!visited[neighbor]) { dfs(neighbor, isBroken); } } } int main() { int N; cin >> N; // Nhập số lượng căn cứ graph.resize(N + 1); // Cấp phát bộ nhớ cho đồ thị hasGenerator.resize(N + 1); // Cấp phát bộ nhớ cho mảng hasGenerator visited.resize(N + 1); // Cấp phát bộ nhớ cho mảng visited // Đọc thông tin về máy phát điện của từng căn cứ for (int i = 1; i <= N; i++) { int generator; cin >> generator; hasGenerator[i] = (generator == 1); // 1: có máy phát điện, 0: không có máy phát điện } // Đọc thông tin về kết nối giữa các căn cứ for (int i = 0; i < N - 1; i++) { int base1, base2; cin >> base1 >> base2; graph[base1].push_back(base2); graph[base2].push_back(base1); } // Duyệt qua từng căn cứ để tính lợi nhuận tối đa for (int i = 1; i <= N; i++) { memset(&visited[0], false, visited.size() * sizeof(visited[0])); // Reset mảng visited trước mỗi lần duyệt dfs(i, false); } // Tính tổng lợi nhuận int totalProfit = profit - (N - profit); cout << totalProfit << endl; return 0; }

Compilation message (stderr)

power.cpp: In function 'void dfs(int, bool)':
power.cpp:23:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for (int i = 0; i < graph[node].size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~~~
power.cpp: In function 'int main()':
power.cpp:56:26: error: taking address of rvalue [-fpermissive]
   56 |         memset(&visited[0], false, visited.size() * sizeof(visited[0])); // Reset mảng visited trước mỗi lần duyệt
      |                 ~~~~~~~~~^
power.cpp:56:71: warning: 'void* memset(void*, int, size_t)' clearing an object of type 'std::vector<bool>::reference' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]
   56 |         memset(&visited[0], false, visited.size() * sizeof(visited[0])); // Reset mảng visited trước mỗi lần duyệt
      |                                                                       ^
In file included from /usr/include/c++/10/vector:68,
                 from power.cpp:2:
/usr/include/c++/10/bits/stl_bvector.h:72:10: note: 'std::vector<bool>::reference' declared here
   72 |   struct _Bit_reference
      |          ^~~~~~~~~~~~~~