hdu 5176 The Experience of Love(带权并查集+思维)
2015-02-16 10:32
351 查看
题意:给一棵树,求任意{两点路径上的最大边权值-最小边权值}的总和。 解法:sigma(maxVal[i]−minVal[i])=sigma(maxVal)−sigma(minVal);所以我们分别求所有两点路径上的最大值的和,还有最小值的和。再相减就可以了。求最大值的和的方法用带权并查集,把边按权值从小到大排序,一条边一条边的算,当我们算第i条边的时候权值为wi,两点是ui,vi,前面加入的边权值一定是小于等于当前wi的,假设与ui连通的点有a个,与vi连通的点有b个,那么在a个中选一个,在b个中选一个,这两个点的路径上最大值一定是wi,一共有a∗b个选法,爱情经验值为a∗b∗wi。 求最小值的和的方法类似。 槽点: 一:这题做数据的时候突然想到的把数据范围设在 unsigned long long 范围内,要爆 long long,这样选手在wa了之后可能心态不好找不到这个槽点,当是锻炼大家的心态和出现wa时的找错能力了,把这放在pretest..很良心的。 二,并查集的时候,用是递归的需要扩栈,一般上10w的递归都需要,所以看见有几个FST在栈溢出的,好桑心。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cstdlib> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> using namespace std; typedef unsigned long long ll; const int maxn = 150010; ll maxv,minv; int fa[maxn]; ll cnt[maxn]; struct node { int u,v; ll w; }e[maxn]; bool cmp1(node x,node y) { return x.w<y.w; } bool cmp2(node x,node y) { return x.w>y.w; } int find(int x) { return fa[x]==x?x:(fa[x]=find(fa[x])); } void merge(int x,int y,ll z,int flag) { int fx = find(x); int fy = find(y); if(fx!=fy) { if(flag) maxv += cnt[fx]*cnt[fy]*z; else minv += cnt[fx]*cnt[fy]*z; fa[fx] = fy; cnt[fy] += cnt[fx]; //cnt[fx] = 0; } } int main() { int n,x,y,cas=1; ll z; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) fa[i]=i,cnt[i]=1; for(int i=1;i<n;i++) scanf("%d%d%I64ud",&e[i].u,&e[i].v,&e[i].w); maxv = minv = 0; sort(e+1,e+n,cmp1); for(int i=1;i<n;i++) { x = e[i].u; y = e[i].v; z = e[i].w; merge(x,y,z,1); } for(int i=1;i<=n;i++) fa[i]=i,cnt[i]=1; sort(e+1,e+n,cmp2); for(int i=1;i<n;i++) { x = e[i].u; y = e[i].v; z = e[i].w; merge(x,y,z,0); } printf("Case #%d: %I64u\n",cas++,maxv-minv); } return 0; }
对于ULL , 可以用 cout , %I64u , %llu 输出 。
相关文章推荐
- HDU 5176 The Experience of Love(带权并查集)
- HDU 5176 The Experience of Love 带权并查集
- hdu 5176 The Experience of Love(并查集)
- HDU 5176 The Experience of Love (带权并查集 + 贪心)
- Valentine's Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]
- hdu 5176 The Experience of Love
- 【并查集】 HDOJ 5176 The Experience of Love
- hdu 5176 The Experience of Love
- HDU 5176 The Experience of Love
- HUD 5176 The Experience of Love
- hdu5176 The Experience of Love[树 并查集]
- HDU 5603 the soldier of love (线段树)
- 2017多校第8场 HDU 6138 Fleet of the Eternal Throne 思维,暴力
- HDU 5603 the soldier of love(BIT)
- hdu5176---The Experience of Love
- hdu 5603 the soldier of love
- 【每天读一点英文】gnuhpc注释版:The Love of Beauty
- HDU 2128 Tempter of the Bone II(BFS)有数据
- HDU 1010 Tempter of the Bone
- zoj 2110(hdu 1010)Tempter of the Bone(深搜)