基本树与图训练 难度:普及+

这篇博客深入探讨了树与图的算法,包括弗洛伊德算法求两点间最短路、Dijkstra算法处理最短路、最小生成树的应用。博主通过实例解析了如何在不同场景下运用这些算法解决实际问题,如医院设置、黑暗城堡、繁忙都市等。此外,还涉及了拓扑排序和模拟等技术。
摘要由CSDN通过智能技术生成

9.8 树与图提高组训练题解

------Frosty_Jackal

目录

医院设置(弗洛伊德)

黑暗城堡(乘法原理与Dij)

繁忙的都市(最小生成树版题)

走廊泼水节(最小生成树贪心)

最优贸易(最短路提高)

工资(拓扑排序)

对称二叉树(思维题)

小球(模拟)

弗洛伊德n的3次方处理出两点间最短路,再用n的2次方处理答案:第一层枚举 医院选择,第二层枚举其他的点到该医院总分,取最大总分。(不是最优的解法,解法很多)

long long ans=1e9;

for(int i=1;i<=n;i++)
{
    long long sum=0;
    for(int j=1;j<=n;++j) sum+=(1ll*dis[j][i]*edge[j]);(i,j可以不相等)
    if(sum<ans) ans=sum;
}

(无重边)

用Dijk算法处理最短路,在处理最短路时,若有与最短路相等的边连入,则对于1到该点,满足题意的方案数+1,若更新该最短路,方案数变为1。

if(d[y]>d[x]+z)
{
pos[y]=1;
d[y]=d[x]+z;
q.push(make_pair(-d[y],y));
}
else if(d[y]==d[x]+z) pos[y]=(pos[y]+1)%mod;

由于方案等于第1点与第2点连边的方案 * 1与3连边的方案 *...1与n连边的方案,最终以乘法原理统计答案

for(int i=1;i<=n;i++){ans=(ans*pos[i])%mod;}

最小生成树模板题,只是多个统计最长边。第一个答案为n-1。

在kruskal的过程中,对于枚举的每一条边,答案+=两个并查集大小乘积【完全图】-1【减去当前最小生成树边】* (当前最小生成树边的权值+1)【满足不为最小生成树且权值尽量小的题意】

建正反图

在正图上从1开始

跑一遍最短路,找出D[x]表示从1到x路径上最小买价, 

在反图上从n跑一遍最短路,找出F[x]表示从1到x路径上最大卖价,最后枚举一遍x找到最大的F[x]-D[x]即为答案。

判断ch[p*2]与ch[p*2+1]是否同“类型”

拓扑排序,建反图,入度为0则工资100,先由入度为0的点宽搜,对于相连的点可以由max(出发点的工资加+1,他自己的工资)更新,将入度为0的放进宽搜队列。记录队列中历史进入的点的总数to,若tot最后不为n则有环,输出Poor Xed。

方法很多,模拟,打表找规律...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值