zoukankan      html  css  js  c++  java
  • 【最短路】题型小总结

    最短路算法大家都很清楚了,比较常用的有dijkstra、SPFA、floyd

    板题

    有N个点,M条边,求S到T的最短路

    直接套dijkstra板

    最短路计数

    统计最短路条数

    加一个way[]数组统计,每次更新dist时,way[to]=way[u]
    当dist相等时way[to]+=way[u]

    打印最短路

    借助一个pre[]数组,与计数处理方式类似

    双权最短路

    先以优先权值求出最短路的所有路径,再从路径中查找出第二权值最小的路径

    权值相乘的最短路

    那就把权值相加改为相乘

    求路径上最大值最小的路径

    将松弛操作改为取最小值操作
    dist[to]=min(dist[to],max(dist[u],edge[k].w));

    带负权最短路

    套SPFA板

    第K短路

    启发式搜索【A*】

    往返最短路

    正反图都跑一次最短路

    破坏路径最短路

    随机破坏一条路径,求最坏情况下的最短路

    如果有影响破坏的路径一定在原先最短路上,先求出路径,再对每一条边分别拆掉跑一次最短路

    封锁海域问题

    有N个点依次排布在一个平面上,平面有左边界和右边界,求最少给每个点多大的范围,才能使这些点将平面分隔开

    主要是构图:
    对于每两个点之间连一条边,权值为两点距离和一半,然后左右边界分别向每个点连一条边,权值为点到边界距离
    然后跑一次从左边界到右边界的最大权值最小的最短路就好了√

    物品合成问题

    有N种物品各有价值,其中某些可以两两合成另一个物品,求合成某个物品所需最小价值

    看似和最短路没有联系,实际上有着最短路的思想:
    先令dist[i]为第i个物品的价值
    每次取出价值最小且未访问过的物品,尝试用它和其他物品组合来减小其他物品的dist
    最终每个物品的dist就是最小价值

    差分约束系统

    这玩意要单独拿出来讲。。。。先不写先。

    最小密度路径

    求出任意两点间  路径权值和/路径数   最小的路径

    floyd算法
    令dist[i][j][L]表示从i->j经过L条路径的最短路
    然后四重循环:
    for(L 2->N)
    	for(k 1->N)
    		for(i 1->N)
    			for(j 1->N)
    				if(i!=j&&j!=k&&i!=k&&dist[i][j][L]>dist[i][k][L-1]+dist[k][j][L-1])
    					dist[i][j][L]=dist[i][k][L-1]+dist[k][j][L-1];




  • 相关阅读:
    CPU理论,平均负载和CPU密集型场景
    Dubbo和Zookeeper
    nmon问题定位和LoadRunner结果分析
    混合场景,面向目标的场景和nmon监控
    性能测试场景的学习:controller
    java vuser协议
    LoadRunner脚本开发:操作数据库(六)
    LoadRunner脚本开发:手写SOAP脚本的三种方法(五)
    jmeter脚本开发:jmeter工具的学习(二)
    子Fragment获取父Fragment
  • 原文地址:https://www.cnblogs.com/Mychael/p/8282879.html
Copyright © 2011-2022 走看看