「NOIP 2013」 货车运输】的更多相关文章

题目链接 戳我 \(Solution\) 这一道题直接用\(kruskal\)重构树就好了,这里就不详细解释\(kruskal\)重构树了,如果不会直接去网上搜就好了.接下来讲讲详细过程. 首先构建\(kruskal\)重构树. 对于询问直接求\(lca\)就可以了,如果没有\(lca\)输出\(-1\),否则输入\(lca\)上的权值就好了,不是很难. \(Code\) #include<bits/stdc++.h> using namespace std; const int N=2000…
[Noip 2013 Day1-3] 货车运输 做法总结 Online Judge:Luogu-1967 Label:启发式合并,离线,整体二分,按秩合并,倍增,最大生成树 打模拟离线赛时做到,顺便总结一下. 一.启发式合并 离线询问,将询问存在端点上.将每条边按照权值从大到小排列. 依照刚才的顺序依次连上这m条边,利用并查集维护图的连通性.合并时采用启发式合并的思维--将所含元素较小的集合连上较大的集合.对于那个较小的集合,我们直接暴力遍历其中的每个点,再暴力回答那个节点上的询问. 总的时间复…
倍增求LCA+最大生成树 题目给出的是一张图,在图上有很多算法无法实现,所以要将其转化为树 题中可以发现货车的最后的载重量是由权值最小的一条边决定的,所以我们求最大生成树 求完最大生成树后我们得到一个森林 现在转化为了求两点路径经过边的边权的最小值,用倍增算法进行计算 #include <bits/stdc++.h> #define inf 1e9 using namespace std; const int MAXN=10100; int n,m,first[MAXN],nxt[MAXN*1…
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人出队,然后其他人先向左看齐,后向前看齐,再把出队的人放在第 $n$ 行 $m$ 列,请你输出每次出队的人的编号.$n,m,q leq 3 times 10^5$ 对于 $n,m leq 50000, q leq 500$ 的数据,可以离散化,但是不能用 map,因为 map 的所有操作都是带 log…
「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, w_i\). 小 C 有一个长为 \(n\) 的行动序列,第 \(i\) 个元素为二元组 \((c_i, d_i)\),表示这次行动小 C 的坐标由 \((x_1, x_2, \cdots, x_{c_i}, \cdots, x_k)\) 变为 \((x_1, x_2, \cdots, x_{c_i…
题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入输出格式 输入格式: 第一行有两个用一个空格隔开的整数n,mn,m,表示 AA 国有nn 座城市和 mm 条道路. 接下来 mm行每行33个整数 x, y, zx,y,z,每两个整数之间用一个空格隔开,表示从 xx号城市到yy号城市有一条限重为 zz 的道路.注意: xx 不…
传送门 Luogu 解题思路 首先 \(\text{Kruskal}\) 一下,构造出一棵森林. 并查集还要用来判断连通性. 倍增 \(\text{LCA}\) 的时候顺便维护一下路径最小值即可. 细节注意事项 代码稍微有点长,不要出小问题 参考代码 #include<cstdio> #include<algorithm> using std::sort; const int MAXN=1e4+10; const int MAXM=5*1e4+10; inline int min(…
题目链接 戳我 \(Solution\) 首先申明几个变量: f[x]:到点x的概率, vis[x]:x点的度 dp[x][y]:(x,y)这条边的概率 number[x][y]:x这条边的编号 下面的式子保证存在一条(x,y)的边 我们可以知道总分的期望为: \[\sum dp[x][y]*number[x][y]\] 即:所有边的期望成这条边的编号的和 那么\(dp\)数组怎么算呢? \[ dp[x][y]=\frac{f[x]}{vis[x]}+\frac{f[y]}{vis[y]}\]…
题目链接 戳我 \(Solution\) 这道题观察数据范围发现很小,再看看题目可以发现是搜索. 这题纯搜索会\(T\)所以要加入适当剪枝 如果一个人后面的比赛都赢却依旧到不了目标分数,则直接\(return\) 限制每个人的分数,使他的分数不超过目标分数 我们用\(fx\)当做分出胜负的场次,\(fy\)当做平的场,ans当做总分数.则可以列出如下方程: \[ \left\{ \begin{array} fx+fy=n*(n-1)/2\\ 3*fx+2*fy=ans \ \end{array}…
题目链接 戳我 \(Solution\) 我们首先想一想如果这一题只是二维的该怎么办? 就是一个最小点覆盖问题.这里就不详细解释了,用网络流或匈牙利都无所谓. 但现在是三维的,那么现在该如何处理呢? 我们发现\(a*b*c<=5000\),所以必定有一个要小于\(\sqrt[3]{5000}\) 所以我们可以枚举最小的一维的状态,那一维已经消了,还是没消. 对于没消的直接如同二维的跑最小点覆盖就好了. 但是\(bzoj\)实在卡不过去 \(Code\) #include<bits/stdc++…