社区讨论

函数返回值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 条回复,欢迎继续交流。

正在加载回复...