Holiday's Accommodation HDU
来源:互联网 发布:数据库设计用什么软件 编辑:程序博客网 时间:2024/06/11 21:56
题目描述:n个点n-1条带权无向边,现每个点都需离开自己的位置前往其他点的位置且两个点不能在同一位置,点移动时选择最短路径走,求所有点移动距离之和的最大值。
分析:n个点n-1条带权无向边且联通(否则孤立的点无法移动到其他点的)一看就是一棵树,故不能考虑图的最短路径的最大值问题,一开始我一直想歪了。队友一眼看出这是棵树,n最大为1e5,若以结点为出发点考虑,则必为O(n^2)的复杂度毫无疑问会超时,所以只能从边考虑。对于每个边,设其左边有x个结点,则其右边有n - x个结点,要想求最大距离值,则每条边被结点们经过的次数要尽可能大,最好的情况就是该边左边的结点全部到了右边或者右边的结点全部到了左边,则此时该边对应的最大值为value * min(x, n - x) * 2。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<cstdlib>#include<sstream>#include<deque>#include<stack>#include<set>#include<map>using namespace std;typedef long long ll;typedef unsigned long long ull;const double eps = 1e-6;const int maxn = 1e5 + 10;const int mod = 10000007;const int dx[] = {1, -1, 0, 0, -1, -1, 1, 1};const int dy[] = {0, 0, -1, 1, -1, 1, -1, 1};const int Dis[] = {-1, 1, -5, 5};const double inf = 0x3f3f3f3f;struct node{ int v; int dis; node(int v = 0, int dis = 0) : v(v), dis(dis){}};int n, m;vector<node> g[maxn];int degree[maxn];int son[maxn];bool vis[maxn];ll ans;void dfs(int u){ int len = g[u].size(); int v, d; for(int i = 0; i < len; ++i){ v = g[u][i].v; d = g[u][i].dis; if(vis[v]) continue; vis[v] = true; dfs(v); son[u] += son[v]; ans += (ll)d * min(son[v], n-son[v]);//两边结点个数取小的得最多经过这条边的次数,再乘以这条边的权值。强转不然会超int。 } ++son[u];//叶子结点的结点个数是它本身,即1。}int main(){ int t; scanf("%d", &t); int u, v, d; int kase = 0; while(t--){ memset(vis, false, sizeof vis); memset(degree, 0, sizeof degree); memset(son, 0, sizeof son); for(int i = 0; i < maxn; ++i){ g[i].clear(); } scanf("%d", &n); for(int i = 1; i < n; ++i){ scanf("%d%d%d", &u, &v, &d); g[u].push_back(node(v, d)); g[v].push_back(node(u, d)); ++degree[u], ++degree[v]; } ans = 0; dfs(1); printf("Case #%d: %I64d\n", ++kase, ans*2LL); } return 0;}
阅读全文
0 0
- hdu Holiday's Accommodation
- Holiday's Accommodation HDU
- HDU 4118 Holiday's Accommodation
- HDU-4118-Holiday's Accommodation
- hdu 4118 Holiday's Accommodation
- hdu Holiday's Accommodation dfs
- HDU - 4118 Holiday's Accommodation
- 【树形DP】 HDU 4118 Holiday's Accommodation
- hdu 4118 Holiday's Accommodation 树上统计
- hdu 4118 Holiday's Accommodation 树形dp
- hdu 4118 Holiday's Accommodation 树形dp
- Regional_2011_H Holiday's Accommodation
- Holiday's Accommodation
- hdu 4118 Holiday's Accommodation 2011 Asia ChengDu Regional Contest
- HDU 4118--Holiday's Accommodation(树形dp)
- [HDU 4118]Holiday's Accommodation[图论][非递归dfs]
- HDU 4118 Holiday's Accommodation(树形DP)
- HDU 4118 Holiday's Accommodation 贪心(树的重心)
- 方法重载
- 逻辑学 笔记一 推论的有效性和可靠性
- windows下QT编译mysql驱动
- Design Pattern
- spring事务传播机制
- Holiday's Accommodation HDU
- centos7使用非root用户进行ssh免密登录,提示key没有在主机注册
- 软件测试技术基础(补充中)
- C++格式化输出小数点后位数
- Petrozavodsk Summer Training Camp 2016 Problem I. Vier 随机化+枚举
- 刘汝佳--开灯问题
- 卫语句优化嵌套表达式
- Round 6 The Two Routes CodeForces
- hexo怎样写博客