I was doing a problem it was related to normal DFS, few of test cases were not passing so i tried different things:
1: (long long)(d * (n - sz[u])); // not passing
2: d* 1LL* (n-sz[u]); //passing all
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;
}
}
I think both are essentially same, but clearly they are not. can someone help ?
edit: what exactly k = d*1LL means ?? what would be the value of k ?