首页 > 其他分享 >题解:城市

题解:城市

时间:2023-08-27 09:44:47浏览次数:39  
标签:int 题解 城市 dfs2 siz now MAX dis

题目链接

你说得对,但是不如换根。换根是由原先的树形 DP 简单变换而来,故事发生在这道叫做《城市》的题目中,在这里你妄图求解每个点到树中其它所有节点的距离,即 \(f_i = \sum_{j = 1}^n dis_{i \to j}\)。可以一次 dfs 求解出 \(f_{root}\),然后我们发现走过一条边 \((u,v,w)\) 会使得 \(siz_v\) 个节点减少 \(w\) 的距离,\(n - siz_v\) 个点增加 \(w\) 的距离,于是你就得到了 \(f_v = f_u + w \times (n - 2 \times siz_v)\),再做一次 dfs 即可。对于每个询问的答案显然为 \(\sum_{i = 1}^n f_i + 2 \times (f_k + n \times w)\)。这样我们代码比标程短 114514 倍,还更好想好写。同时效率上 std 跑一遍我的代码能够跑三遍,超越了绝大多数程序(包括你)的水平,这就是换根给我骄傲的资本。

namespace LgxTpre
{
    static const int MAX=200010;
    static const int inf=2147483647;
    static const int INF=4557430888798830399;
    
    int n,q,dis[MAX],siz[MAX],f[MAX],ans;
    int x,y,z,k,w;
    vector<pii> G[MAX];
	
    inline void lmy_forever()
    {
    	read(n,q);
    	for(int i=1;i<n;++i) read(x,y,z),G[x].eb(mp(y,z)),G[y].eb(mp(x,z));
    	
    	auto dfs1=[&](auto dfs1,int now,int father)->void
    	{
    		siz[now]=1;
    		for(auto [to,val]:G[now]) if(to!=father) dis[to]=Cadd(dis[now],val),dfs1(dfs1,to,now),siz[now]+=siz[to],Madd(f[1],dis[to]);
		};
		dfs1(dfs1,1,0);
		
		auto dfs2=[&](auto dfs2,int now,int father)->void
		{
			Madd(ans,f[now]);
			for(auto [to,val]:G[now]) if(to!=father) f[to]=Cadd(f[now],Cmul(val,((siz[1]-2*siz[to])%Mod+Mod)%Mod)),dfs2(dfs2,to,now);
		};
		dfs2(dfs2,1,0);
		
		for(int i=1;i<=q;++i) read(k,w),write(Cadd(ans,Cmul(Cadd(f[k],Cmul(n,w)),2ll)),'\n');
    }
}

标签:int,题解,城市,dfs2,siz,now,MAX,dis
From: https://www.cnblogs.com/LittleTwoawa/p/17659885.html

相关文章

  • LGR-156-Div.3 题解
    LGR-156-Div.3题解洛谷网校8月普及组月赛I&MXOIRound1&飞熊杯#2第一次AK一个比赛!而且排名这么靠前!!!T1宝箱题目链接思路注意到答案有两种情况。1.从原点走到\(a\),再从\(a\)走到\(b\),2.从原点走到\(b\),再从\(b\)走到\(a\)。取一个最小值即可。代码int......
  • react-pdf在部分iOS手机上加载pdf失败问题解决
    最近项目快结束了,测试提了一个bug,iOS手机上加载pdf一直在转圈,加载不出来内容。看到这个bug,在电脑上和安卓手机上没有问题,iOS手机中打开确实又问题,初步确定为app问题。我们的项目是集成在客户的app里的,可能是app内的WebView和Safari有一些差异导致的问题。首先直接在iOS手机上用a......
  • 力扣-2. 两数相加(C++题解)
    题目链接:https://leetcode.cn/problems/add-two-numbers/description/给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之......
  • 用5年“抱薪”,智能网联成就长沙谋划全球研发中心城市“沸点”
    文|智能相对论作者|佘凯文“湖南人性质沉毅,守旧固然守得很凶,趋新也趋得很急。”这是蔡元培在《论湖南人才》中对于湖南的一句评价。湖南各地或都有自己的品质,但要说“趋新”,首当其冲的还属长沙,这便也诞生了“敢为人先”的长沙精神,如今这种精神又一次在长沙开始全面绽放。8月25日,......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • P1848 Bookshelf G 题解
    这是本蒟蒻写的第一篇题解(写不好请指出)很明显他是一道dp题,因为第i本书放哪里只跟前i-1本树的放法有关系。我们可以是定义f[i][j]表示放了i本书,最后一层书架是以第j本书开始的。那么有动态转移方程:\(f[i][i]=min(f[i-1][j])+hi,w[j]+...+w[i-1]<=L\)\(f[i][j]=f[i-1][j]+max(0......
  • 力扣-228. 汇总区间(C++题解)
    题目链接:https://leetcode.cn/problems/summary-ranges/description/给定一个 无重复元素的 有序整数数组\(nums\)。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,\(nums\)的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于\(......
  • P2151 [SDOI2009] HH去散步 题解
    传送门简要题意:有\(n\)个人,\(m\)条无向边,走\(e\)条边,满足条件若第\(i\)条边为\(u->v\)则第\(i+1\)条边不能是\(v->u\),问\(s->t\)的方案有多少个,取模45989。因为要满足题目关于边的条件,所以我们考虑点边互换。将\(u-v\)的无向边一分为二变成\(u->v,v->u\),第\(i\)条边记录两个变......
  • 【题解】CF1413C Perform Easily(双指针)
    【题解】CF1413CPerformEasily写篇题解水水经验~顺便增加一下RP~比较套路和简单的一道绿题。题目链接PerformEasily-洛谷|计算机科学教育新生态(luogu.com.cn)题意概述给你一个长度为\(6\)的\(a\)数组,和一个长度为\(n\)的\(b\)数组,要求将\(b\)数组内的每......
  • [CF1794E] Labeling the Tree with Distances 题解
    [CF1794E]LabelingtheTreewithDistances题解题目描述给你一个树,边权为\(1\)。给定\(n-1\)个数,你需要将这些数分配到\(n-1\)个节点上。一个点\(x\)是好的,当且仅当存在一种分配方案,所有被分配数的点到\(x\)的最短路径长度等于其被分配的数。求所有好点。思路从......