답안 #763307

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
763307 2023-06-22T08:02:49 Z vjudge1 Power Plant (JOI20_power) C++14
컴파일 오류
0 ms 0 KB
#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

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
      |          ^~~~~~~~~~~~~~