题目大意:这个国家有n个城市,编号1-n,编号1的城市为首都,城市之间有m条双向道路连接,同时有k条火车路线可以直接让其他城市与首都城市连接,每条火车路线也存在自己的距离长度,因为火车路线的修建存在一定花费,现在需要保证首都在其余的n-1个城市的距离最短的情况下,去除一些没没必要的火车路径,问最多能去除几条。
题解思路:在用dijkstra 求最短路时,其实最短路的条数是可以确定的。这个题就利用了这一点,把火车,汽车都加在同一个图里,找首都到所有点的最短路,以及最短路的条数,如果直达某城市的火车线小于最短路,明显可以去了这个火车线,如果相等,那么就得根据最短路的条数决定了。
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define ll long long
typedef pair<ll,int> PII;
const ll INF=9e18+7;
const int mod = 1e9+7;
int n,m,k;
int road[maxn];
ll kk[maxn];
ll dis[maxn];
struct node{
ll to,cost;
node(ll x,ll y){
to=x;
cost=y;
}
};
vector<node>v[maxn];
void dijkstra(int x){
priority_queue<PII,vector<PII>,greater<PII