我遇到的问题是它与正常的DFS有关,很少有测试用例没有通过,所以我尝试了不同的东西:
1 :(很长)(d *(n - sz [u])); //不通过
2:d * 1LL *(n-sz [u]); //传递所有
const int N = 100000;
vector <int> adj[N + 1];
bool visited[N + 1];
int sz[N + 1];
int n;
long long num, den;
void dfs(int u, int d) {
visited[u] = 1;
sz[u] = 1;
for(auto v: adj[u]) {
if(!visited[v]) {
dfs(v, d + 1);
sz[u] += sz[v];
}
}
if(u != 1) {
num += (long long)(d * (n - sz[u])); //prob lies here
den += d;
}
}
我认为两者基本相同,但显然它们不是。有人可以帮忙吗?
编辑:究竟k = d * 1LL究竟是什么意思?什么是k的价值?