正题

题目链接:https://www.luogu.com.cn/problem/P4103


题目大意

nnn个点的一棵树,mmm次给出一些点,求最近点对,最远点对和所有点对的距离和。


解题思路

先构造一棵虚树,然后在上面dpdpdp统计答案即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10,T=20,inf=1e18;
struct node{ll to,next;
}a[N*2];
ll n,k,q,tot,st,cnt,ans1,ans2,ans3,dep[N],ls[N];
ll dfn[N],f[N][T+1],siz[N],dp[N][2],s[N],p[N];
void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(ll x,ll fa){dep[x]=dep[fa]+1;dfn[x]=++cnt;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa)continue;f[y][0]=x;dfs(y,x);}return;
}
ll LCA(ll x,ll y){if(dep[x]>dep[y])swap(x,y);for(ll i=T;i>=0;i--)if(dep[f[y][i]]>=dep[x])y=f[y][i];if(x==y)return x;for(ll i=T;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
void ins(ll x){if(!st){s[++st]=x;return;}ll lca=LCA(x,s[st]);while(st>1&&dep[lca]<dep[s[st-1]])addl(s[st-1],s[st]),st--;if(dep[lca]<dep[s[st]])addl(lca,s[st]),st--;if((!st)||(lca!=s[st]))s[++st]=lca;s[++st]=x;return;
}
bool cmp(ll x,ll y)
{return dfn[x]<dfn[y];}
void solve(ll x){if(siz[x])dp[x][0]=dp[x][1]=0;else dp[x][0]=0,dp[x][1]=inf;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to,w=dep[y]-dep[x];solve(y);ans3+=w*siz[y]*(k-siz[y]);if(siz[x]>0){ans1=max(ans1,dp[x][0]+dp[y][0]+w);ans2=min(ans2,dp[x][1]+dp[y][1]+w);}dp[x][0]=max(dp[x][0],dp[y][0]+w);dp[x][1]=min(dp[x][1],dp[y][1]+w);siz[x]+=siz[y];siz[y]=0;}ls[x]=0;return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);} dfs(1,0);for(ll j=1;j<=T;j++)for(ll i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];scanf("%lld",&q);memset(ls,0,sizeof(ls));while(q--){scanf("%lld",&k);st=tot=0;for(ll i=1;i<=k;i++){scanf("%lld",&p[i]);siz[p[i]]++;}sort(p+1,p+1+k,cmp);if(p[1]!=1)s[++st]=1;for(ll i=1;i<=k;i++)ins(p[i]);while(st>1)addl(s[st-1],s[st]),st--;ans1=ans3=0;ans2=inf;solve(1);siz[1]=0;printf("%lld %lld %lld\n",ans3,ans2,ans1);}return 0;
}

P4103-[HEOI2014]大工程【虚树,dp】相关推荐

  1. BZOJ 3611: [Heoi2014]大工程 [虚树 DP]

    传送门 题意: 多次询问,求最长链最短链链总长 煞笔$DP$记录$d,c,f,g$ $MD$该死拍了一下午没问题然后交上去就$T$ 然后发现树链剖分写成$size[v]+=size[u]$ 我想知道我 ...

  2. P4103 [HEOI2014]大工程

    P4103 [HEOI2014]大工程 题目描述 详见:P4103 [HEOI2014]大工程 Solution 显然是虚树的板子题啊(我也不造我为啥调了1h) 直接建虚树,DP. 两两路径和很好求, ...

  3. bzoj 3611: [Heoi2014]大工程(虚树+树形DP)

    3611: [Heoi2014]大工程 Time Limit: 60 Sec  Memory Limit: 512 MB Submit: 1697  Solved: 718 [Submit][Stat ...

  4. BZOJ3611: [Heoi2014]大工程

    题解:虚树模板题 维护虚树 跑树dp即可 /**************************************************************Problem: 3611Use ...

  5. [bzoj3611][Heoi2014]大工程

    [bzoj3611][Heoi2014]大工程 标签: 虚树 DP 题目链接 题解 发现\(\sum k与n\)是同阶的,很容易想到虚树. 那么难点就在dp统计上了. 对于和的话,dp[u]表示u子树 ...

  6. 洛谷P2495 [SDOI2011]消耗战(虚树dp)

    P2495 [SDOI2011]消耗战 题目链接 题解: 虚树\(dp\)入门题吧.虚树的核心思想其实就是每次只保留关键点,因为关键点的dfs序的相对大小顺序和原来的树中结点dfs序的相对大小顺序都是 ...

  7. 【BZOJ3611】【HeOI2014】—大工程(虚树+dp)

    传送门 首先肯定建出虚树 考虑三种答案如何分别统计 路径长度和显然示是对于每条边考虑一下上下有多少个点,乘一下就可以了 最大值显然就是树的直径 最小值可以考虑树形dpdpdp,考虑mn[i]mn[i] ...

  8. 【XSY3350】svisor - 点分治+虚树dp

    题目来源:NOI2019模拟测试赛(九) 题意: 吐槽: 第一眼看到题觉得这不是震波的完全弱化版吗--然后开开心心的码了个点分治 码到一半突然发现看错题了--心态崩了于是就弃疗手玩提答去了 于是就快乐 ...

  9. 牛客 - 血压游戏(虚树+dp)

    题目链接:点击查看 题目大意:中文题,不难理解 题目分析:这个题目比赛的时候没来得及看,比赛结束后看到有大佬写了一篇长链剖分+线段树的题解就被吓到了(主要是感觉太麻烦了,懒得去补了),读完题后总感觉似 ...

最新文章

  1. poj1274 最大二分匹配
  2. java 安全认证_restful安全认证
  3. 你真的要收下这份大礼包!!
  4. linux多进程通过中断实现,关于Linux内核源码中是如何区别进程上下文和中断上下文...
  5. 【NOIP2013提高组】货车运输
  6. MSP430的AD7705驱动程序
  7. SharePoint 2019 部署(二)搜索
  8. DNS错误不能上网怎么办?电脑dns错误修复方法?
  9. js中 push pop shift unshift使用的小问题
  10. 华为HCIP-DATACOM(821)411-440
  11. 【科普常识:常用音频参数解析】
  12. 蓝牙硬件设备没有链接到计算机,电脑连接蓝牙却搜索不到蓝牙设备怎么办
  13. 威海北洋电气java面试题_面试题_76_to_81_Java 最佳实践的面试问题
  14. 关于利用postman来模拟并发请求
  15. desktop goose电脑版教程
  16. 网页上简体繁体汉字切换
  17. 同济七版高等数学 上册 复习指导、公式推理简易过程、常用结论归纳
  18. 戴尔服务器改win7系统,戴尔电脑怎么把Win10系统改装win7系统?
  19. 大数据未来会如何发展
  20. 22. Vue keycodes按键修饰符

热门文章

  1. 二面京东,面试官直接问我JVM,我心里一阵暗爽~
  2. Java 泛型 泛型的约束与局限性
  3. oracle中文加密算法,Oracle数据库替代加密算法
  4. android fragmentstatepageradapter框架,安卓爬坑指南之FragmentStatePagerAdapter
  5. js 上下箭头滚动_JS中的this完全讲解,再也不会被this搞晕了
  6. php dechex 补零,PHP dechex()函数
  7. php框架快速入门,php-laravel4.0框架 简单快速入门
  8. java 根据客户端重定向_JavaWeb【1.4HttpServletResponse类、重定向】
  9. 爬取猎聘python_爬取猎聘大数据岗位相关信息--Python
  10. 混凝土墙开洞_满城混凝土柱子切割资质齐全