最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Codeforces1179D树形DP斜率优化

IT圈 admin 45浏览 0评论

2024年3月22日发(作者:郁冬梅)

if(q[pos] == b[i]) {

if(mp[b[i]] > 1) {

ans = min(ans, b[i].second + q[pos].second + (n - b[i].first - q[pos].first) * (n - b[i].first - q[pos].first));

} else {

if(pos < r) ans = min(ans, b[i].second + q[pos + 1].second + (n - b[i].first - q[pos + 1].first) * (n - b[i].first - q[pos + 1].first));

else ans = min(ans, b[i].second + q[pos - 1].second + (n - b[i].first - q[pos - 1].first) * (n - b[i].first - q[pos - 1].first));

}

} else {

ans = min(ans, b[i].second + q[pos].second + (n - b[i].first - q[pos].first) * (n - b[i].first - q[pos].first));

}

}

}

for (int i = 1; i <= tot; i++) {

ans = min(ans, b[i].second + (n - b[i].first) * (n - b[i].first));

}

if(fa != -1 && G[x].size() == 1) dp[x] = sz[x] * sz[x];

a[x] = make_pair(sz[x], dp[x]);

}

int main() {

int x, y;

memset(dp, 0x3f, sizeof(dp));

// freopen("", "r", stdin);

// freopen("", "w", stdout);

scanf("%lld", &n);

for (int i = 1; i < n; i++) {

scanf("%d%d", &x, &y);

add(x, y);

}

ans = 1e18;

dfs(1, -1);

ans = min(ans, dp[1]);

ans -= n;

ans /= 2;

ans = 2ll * n * (n - 1) / 2ll - ans;

printf("%lldn", ans);

}

  

2024年3月22日发(作者:郁冬梅)

if(q[pos] == b[i]) {

if(mp[b[i]] > 1) {

ans = min(ans, b[i].second + q[pos].second + (n - b[i].first - q[pos].first) * (n - b[i].first - q[pos].first));

} else {

if(pos < r) ans = min(ans, b[i].second + q[pos + 1].second + (n - b[i].first - q[pos + 1].first) * (n - b[i].first - q[pos + 1].first));

else ans = min(ans, b[i].second + q[pos - 1].second + (n - b[i].first - q[pos - 1].first) * (n - b[i].first - q[pos - 1].first));

}

} else {

ans = min(ans, b[i].second + q[pos].second + (n - b[i].first - q[pos].first) * (n - b[i].first - q[pos].first));

}

}

}

for (int i = 1; i <= tot; i++) {

ans = min(ans, b[i].second + (n - b[i].first) * (n - b[i].first));

}

if(fa != -1 && G[x].size() == 1) dp[x] = sz[x] * sz[x];

a[x] = make_pair(sz[x], dp[x]);

}

int main() {

int x, y;

memset(dp, 0x3f, sizeof(dp));

// freopen("", "r", stdin);

// freopen("", "w", stdout);

scanf("%lld", &n);

for (int i = 1; i < n; i++) {

scanf("%d%d", &x, &y);

add(x, y);

}

ans = 1e18;

dfs(1, -1);

ans = min(ans, dp[1]);

ans -= n;

ans /= 2;

ans = 2ll * n * (n - 1) / 2ll - ans;

printf("%lldn", ans);

}

  

发布评论

评论列表 (0)

  1. 暂无评论