NOIP2013 D1T3 货车运输】的更多相关文章

[NOIP2013T3]货车运输 背景 noip2013day1 描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重 量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的 情况下,最多能运多重的货物. 输入格式 输入文件第一行有两个用一个空格隔开的整数 n, m, 表示 A 国有 n 座城市和 m 条道 路. 接下来 m 行每行 3 个整数 x. y. z,每两个整数之间用一个空格隔开,表示从 x 号城市 到 y…
目录 先来证明下lemma: 图上2点间最小边权最大的路径一定在MST上 感性理解下: 每次kruskal algo都连接最大的不成环边 此时有2个未联通的联通块被连起来. 那么考虑u, v两点的联通块 : 它们并起来时选的边最大. (将比这条边大的边加入生成树不能使得u,v联通) 这个思想是kruskal重构树的基础(每个联通块选取一个代表点) sb题, 但是做的噎屎了, 花了1.5h 我还是应该熟悉一下 最小生成树, 树上倍增和并查集 2个sb错误: 见code l58 并查集没初始化 co…
思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 105000 int n,m,tot=0,xx,yy,zz,ans; int first[N],v[N*10],next[N*10],w[N*10],f[N],dep[N],fa[N][20],minn[N][20]…
[NOIP2013]货车运输 Description A 国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有q辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. Input 第一行有两个用一个空格隔开的整数n,m,表示A国有n座城市和m条道路.接下来m行每行3个整数x,y,z,每两个整数之间用一个空格隔开,表示从x号城市到y号城市有一条限重为z的道路.注意:x不等于y,两座城市之间可能有多条道路.接下来一行有一个整数…
感觉这题挺水的……真的挺水的…… 原题: A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 0 < n < 10,000,0 < m < 50,000,0 < q < 30,000,0 ≤ z ≤ 100,000. 思路非常简单,求最大生成树,然后剖,甚至连修改操作都没有 这题水啊,二分就有60,正解就是个裸的生成树…
题面 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. Input 第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路. 接下来 m 行每行 3 个整数 x.y.z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z 的道路.注意:x 不等于 y,两座城市之间…
题目描述 AA国有nn座城市,编号从 1到n,城市之间有m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入输出格式 输入格式: 第一行有两个用一个空格隔开的整数n,m,表示 A 国有 n 座城市和 m 条道路. 接下来 m行每行3个整数 x,y,z,每两个整数之间用一个空格隔开,表示从 xx号城市到yy号城市有一条限重为 z的道路.注意:x 不等于 y,两座城市之间可能有多条道路 . 接下…
$Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的最小值以便之后统计答案. 再一看发现这题并没说给的图是联通的,也就是说跑了最大生成树之后可能有若干棵树.所以构树的时候要注意不能随便选一个点构完就不管了,要对每一个联通块都构一次.其他的地方似乎没有因为它有多棵树而有什么不同,只是询问的时候看下是不是一个联通块里的就好. $Code$ #includ…
Problem 树上倍增 题目大意 给出一个图,给出若干个点对u,v,求u,v的一条路径,该路径上最小的边权值最大. Solution 看到这个题第一反应是图论.. 然而,任意路径最小的边权值最大,如果仔细思考的话就会知道,如果两个点相互连通,那么一定走的是最大生成树上的路径,而不会选择其他任何一条路径去走. 这个是可以非常简单证明的,就不再详述. 那么既然知道了这个,当然是先建一颗最大生成树啦! 现在问题来了,Prim&Kruskal,选哪个? 分析一下,prim复杂度$O(n^2)$,n为总…
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最大生成树后,用st表维护最小值,然后随便倍增下就好了. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include&l…