Jzzhu and Cities(最短路计数)

该博客讨论了一道题目,涉及一个国家的n个城市和m条道路,其中首都城市1与其他城市通过k条火车线路相连。问题要求在保持首都与其他城市最短距离的同时,最大限度地移除不必要的火车线路。解决方案利用Dijkstra算法求解最短路径,并依据最短路径的条数判断哪些火车线路可以被移除。
摘要由CSDN通过智能技术生成

题目链接

题目大意:这个国家有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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值