社区讨论
函数返回值void换成int出错
P1364医院设置参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mdkbs5cv
- 此快照首次捕获于
- 2025/07/26 22:08 7 个月前
- 此快照最后确认于
- 2025/11/04 03:40 4 个月前
CPP
#include <bits/stdc++.h>
namespace def {
#define usd unsigned
#define ll long long
#define _for(i, end) for (int i = 0; i < (end); ++i)
#define FOR(i, begin, end) for (int i = (begin); i <= (end); ++i)
#define dFOR(i, begin, end) for (int i = (begin); i >= (end); --i)
#define en std::cout << '\n'
#define sp std::cout << ' '
#define TYPE(x) static_cast<x>
#define FAST_CIO (std::ios::sync_with_stdio(false), std::cin.tie(nullptr))
#define DebugOutput std::cerr
#ifdef devcpp
#define INFO(x) (DebugOutput << "Debug INFO: " << "\tValue: { " << #x << " } = " << (x) << "\n")
#define DBG(x) (DebugOutput << x << '\n')
#define PAUSE (en, system("PAUSE"), en)
#else
#define INFO(x)
#define DBG(x)
#define PAUSE
#endif
template<typename ...Ts>
void get(Ts& ...es) {
((std::cin >> es), ...);
}
template<typename ...Ts>
void put(const Ts& ...es) {
((std::cout << es << ' '), ...);
en;
}
template<typename ...Ts>
void put_space(const Ts& ...es) {
((std::cout << es << ' '), ...);
}
template<typename ...Ts>
void put_end(const Ts& ...es) {
((std::cout << es << '\n'), ...);
}
template<typename ...Ts>
void put_line(const Ts& ...es) {
((std::cout << es), ...);
en;
}
template<typename ...Ts>
void put_default(const Ts& ...es) {
(std::cout << ... << es);
}
}
using namespace def;
struct node {
int value {}, ls {}, rs {}, tot {};
ll power {};
};
std::vector<node> vec;
int add(int root, int deep) {
if (!root) {
return 0;
}
int tmp = add(vec[root].ls, deep + 1) + add(vec[root].rs, deep + 1);
vec[root].tot = vec[root].value + vec[vec[root].ls].tot + vec[vec[root].rs].tot;
tmp += deep * vec[root].value;
return tmp;
}
ll ans = LONG_LONG_MAX;
void update(int root) {
int ls = vec[root].ls, rs = vec[root].rs;
ans = std::min(ans, vec[root].power);
// PAUSE;
if (ls) {
INFO(ls);
vec[ls].power = vec[root].power - vec[ls].tot + vec[1].tot - vec[ls].tot;
update(ls);
}
if (rs) {
INFO(rs);
vec[rs].power = vec[root].power - vec[rs].tot + vec[1].tot - vec[rs].tot;
update(rs);
}
}
int main() {
int n;
get(n);
vec.push_back({0, 0, 0});
for (int i = 0, w, u, v; i < n; ++i) {
get(w, u, v);
vec.push_back({w, u, v});
}
PAUSE;
vec[1].power = add(1, 0);
PAUSE;
#ifdef devcpp
for (int i = 1; i < vec.size(); ++i) {
put(vec[i].value, vec[i].ls, vec[i].rs, vec[i].tot, vec[i].power);
}
#else
#endif
update(1);
put(ans);
}
namespace def {
#undef usd
#undef ll
#undef _for
#undef FOR
#undef dFOR
#undef en
#undef sp
#undef TYPE
#undef FAST_CIO
#undef DebugOutput
#undef INFO
#undef DBG
}
在第68行
void update(int root)这个
把void换成int开O2全MLE不开全RE
本地测试时开O2死循环,不开正常
有么有大佬解答一下回复
共 5 条回复,欢迎继续交流。
正在加载回复...