题目大意:给定 N 个点 M 条边的无向简单联通图,留下最多 K 条边,求剩下的点里面从 1 号顶点到其余各点最短路大小等于原先最短路大小的点最多怎么构造. 题解:我们可以在第一次跑 dij 时直接采用贪心策略,即:若当前答案集合的大小小于 K 且优先队列非空,则继续优先队列BFS,每次把一条边加入到答案集合中.因为是在求解最短路过程中向答案集合中加边,可知这就是一种最优策略. 代码如下 #include <bits/stdc++.h> using namespace std; typedef…
一个完全图 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<…