题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1029  Solved: 310[Submit][Status][Discuss] Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的…
https://www.lydsy.com/JudgeOnline/problem.php?id=4289 https://www.cnblogs.com/clrs97/p/5046933.html  claris的题解很清晰 如果单纯把无向边拆成有向边然后变成点再连有向边需要建m^2条边. 那么这里可以差分建图压缩新图边的数量,把原图每个点的出边和入边排序,权值相同的出边到入边(开始是无向图所以每个出边一定有权值相同的入边,入边也是)连一条权值为相同权值的边. (从小到大排序后)每条出边往它的…
4289: PA2012 Tax Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 168  Solved: 69[Submit][Status][Discuss] Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 N<=100000 M<=200000 Input Output Sample I…
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 N<=100000 M<=200000 Solution 这题关键在于化边为点,把无向边拆成2条有向边 考虑最直白的一种建图方法,对于每一个点u,它的每一条入边向所有出边连边 但这样边数太多了,最坏是\(M^2\)条边,不可行 考虑用差值来建图,每条出边向第一条比它大的出边连一条权值为权差值的…
题意 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权N<=100000M<=200000 题解一 无向图连边时要拆成两条边,这大家都知道 然后把边看成”点”,(优化:)因为不可能每个”点”之间都能连边,所以 对除了 1点和 n点之外的点连出去的边(真实边)按权值从小到大排个序,边看作”点” 然后 i “点”向 i + 1”点”连一条边值为(化点之前的两条边的权值差…
题意 一个 \(n\) 个点的完全图,两点之间的边权为 \((i\ xor\ j)*C\) ,同时有 \(m\) 条额外单向路径,问从 \(S\) 到 \(T\) 的最短路. \(n\leq 10^5,\ m\leq 5\times 10^5,C\leq 100\). 分析 如果没有额外的边,会直接从 \(S\) 到 \(T\) ,因为如果每个二进制位 \(i\) 不同那么一定会有一步走 \((1<< i)*C\), 如果相同也没有必要多走几个点而可能多一部分路程. 如果多了一些特殊边,最后的…
首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点.若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值.这样跑最短路是$O(m^2\log m)$的. 用类似网络流中补流的方法,一条边拆成的两个点之间连权值为边的原权值的边(第一种边).对于一个点,将所有以它为起点的边排序,将相邻的两条边对应的点连边,小的往大的连权值为两条边的原权值差的边,大的往小的连权值为0的边(第二种边).建超级源汇,最短路即可. 若流了第一种边则代表最短路中有这条边,若流了第二种边则代表换边.复…
一个直观的想法是把每条边拆成两条有向边,同时每条有向边是新图中的一个点.对于两条边a->b与b->c,两点之间连有向边,费用为两条边费用的最大值.然后新建源点S与汇点T,由S向所有起点为1的边连边,T接受所有终点为n的边,那么答案就是S到T的最短路. 这样子的边数为$O(m^2)$,不能承受. 考虑枚举中转点x,将所有与它有关的边按费用从小到大排序.对于每条边,从以x为终点的点向以x为起点的点连边,费用为该边的费用.从以x为起点的点向下一条边连边,费用为两条边费用的差值,向上一条边连边,费用为…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 好巧妙的转化!感觉自己难以想出来... 参考了博客:https://blog.csdn.net/reverie_mjp/article/details/52134142 把边变成点,相互之间连边: 原图上由一个点连接的许多边之间应该通过连新边达到题目要求的取较大值的目的: 做法就是把一个原图点的关联边排序,然后较小的边向较大的边连边权为差值的新边,较大的边连回去边权为0的新边: 那么…
题目描述 一个n*n的网格图上有m个探测器,每个探测器有个探测半径r,问这n*n个点中有多少个点能被探测到. 输入输出格式 输入格式: (1<=r<n<=5000) (1<=m<=5000) 第一行3个整数n,m,r 接下来m行,每行两个整数x,y表示第i个探测器的坐标 输出格式: 能被探测到的点的个数 输入输出样例 输入样例#1: 复制 5 2 1 3 3 4 2 输出样例#1: 复制 8 #include <iostream> #include <cma…