Codeforces 144D Missile Silos 最短路】的更多相关文章

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A country called Berland consists of n cities, numbered with integer numbers from 1 to n. Some of them are connected by bidirectional roads.…
题目传送门 /* 最短路: 不仅扫描边,还要扫描点:点有两种情况,一种刚好在中点,即从u,v都一样,那么最后/2 还有一种是从u,v不一样,两种的距离都是l 模板错了,逗了好久:( */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <queue> using namespace…
题目链接:http://codeforces.com/problemset/problem/144/D 思路:首先spfa求出中心点S到其余每个顶点的距离,统计各顶点到中心点的距离为L的点,然后就是要统计在边上的点了,可以枚举边(这里边的数量最多也就100000条),对于枚举的某条边,如果它的其中某个端点到S的距离记过这条边,也就是满足一下这个条件:d1 + w == d2 || d2 + w == d1,那么边上符合要求的点最多只有一个,否则,就要判断d1,d2的关系,对于求出的边上的某个符合…
链接 Codeforces 667D World Tour 题意 给你一个有向稀疏图,3000个点,5000条边. 问选出4个点A,B,C,D 使得 A-B, B-C, C-D 的最短路之和最大. 思路 枚举中间两个点,端点就是不与这三个点重复的最大的那个点来更新答案.因为是稀疏图,可以做n遍spfa来维护两两之间的最短路. 代码 #include <iostream> #include <cstdio> #include <vector> #include <s…
题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1:假设最后留下的边是互不相交的两条路径.此时的答案是n-s1到t1的最短路径-s2到t2的最短路径. 2:假设最后留下的边有重合的一段,此时只要枚举重合的这一段的起点和终点,就可以判断.注意此时要考虑这两条路径经过枚举的两点的顺序. 限制的条件比较多,可以用来剪枝的条件也很多. 由于所有边的长度为1,用DF…
一个完全图 1和n肯定有一条路  不是公路就是铁路  另= 另一个跑遍最短路即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; , INF = 0x7fffffff; int head[maxn], cnt, n, m; int vis[maxn], d[maxn]; ][]; struct node { int u, v, next; }Node[maxn<…
Buy a Ticket 题意:有n个点和m条路(都收费),n个点在开演唱会,门票不同,对于生活在n个点的小伙伴,要求计算出每个小伙伴为了看一场演唱会要花费的最小价格: 思路: 这道题我一开始觉得要对每一个点都跑一次最短路, 然而只用把dis[]的每个点初始化成每个地方的门票价格,在放入优先队列中,接着再跑一遍Dijkstra: 对Dijkstra刷新了认识.至于原理: (可以想明白,每次在队列中找到最小的门票价格去更新(松弛): 注意路费要计算来回: #include <iostream>…
题目链接:http://codeforces.com/problemset/problem/95/C C. Volleyball time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Petya loves volleyball very much. One day he was running late for a volleyb…
题意: 设从1到每个点的最短距离为d,求删除几条边后仍然使1到每个点的距离为d,使得剩下的边最多为k 解析: 先求来一遍spfa,然后bfs遍历每条路,如果d[v] == d[u] + Node[i].w 则说明这条路要保留 注意是按着走的路的顺序输出的 wa1 注意最大值设为0x3f  wa3  学到了...emm 用memset设置数组为0x3f是无穷大 #include <iostream> #include <cstdio> #include <sstream>…
题目链接:http://codeforces.com/contest/95/problem/C 思路:首先dijkstra预处理出每个顶点到其他顶点的最短距离,然后如果该出租车到某个顶点的距离小于等于最短距离,就连边,费用为一开始出租车所需的费用,建好图之后再求一次最短路即可. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <…