Codeforces-450D-Jzzhu and Cities+dji
参考:https://blog.csdn.net/corncsd/article/details/38235973
传送门:http://codeforces.com/problemset/problem/450/D
题意:
有N个地方,M条线路,K条火车路(从1出发)。最多删掉多少火车路使1到每个点的最短路不变。
思路:
用dijkstra的思路,优先队列每次找出d最小的。先用火车路更新最小的d。当u的最短路确定的时候,若还是那个火车路,没有被别的路更新,说明这条火车路不能删,若这条路已经被更新过,说明火车路能删。
怎么判断一个点有没有被更新过呢,这里有个巧妙的方法,一开始把节点编号的负值加到优先队列中,如果最后确定最短路的时候还是负值说明没有被更新过。这个巧妙点还在于,如果存在两个的 first 负值相同,那么,编号为正的一定排在前面,就是说普通路的优先级会比铁路的高;
有一点要注意,更新条件是d[v]>=d[u]+w,因为如果出现和火车路长度相同的路也要更新,因为这样也可以把火车路删掉。
把d加入队列的时候可以加d的负值,因为默认的优先队列是先pop大的,负的最大就是正的最小。
ac代码:
- #include <iostream>
- #include <queue>
- #include <cstdio>
- #include <vector>
- #include <cstring>
- using namespace std;
- #define pb push_back
- typedef long long ll;
- const ll INF = 1e18+;
- const int maxn = 1e5+;
- ll n, m, k;
- ll dis[maxn];
- bool vis[maxn],vv[maxn];
- vector< pair<ll, ll > >mp[maxn];
- priority_queue< pair<ll ,ll > >q;
- int main(){
- scanf("%lld%lld%lld",&n,&m,&k);
- memset(vv,,sizeof(vv));
- for(int i=; i<=m; i++)
- {
- ll u, v;
- ll c;
- scanf("%lld%lld%lld",&u,&v,&c);
- mp[u].pb(make_pair(v,c));
- mp[v].pb(make_pair(u,c));
- }
- for(int i=; i<=n; i++)
- dis[i] = INF, vis[i]=false;
- for(int i=; i<=k; i++)
- {
- ll a;
- ll b;
- scanf("%lld%lld",&a,&b);
- dis[a] = min(dis[a],b);
- q.push(make_pair(-b,-a));
- }
- ll ans = ;
- dis[] = ;
- // vis[1] = true;
- q.push(make_pair( , ));
- while( !q.empty() )
- {
- ll v = q.top().second;
- q.pop();
- if(v<)
- {
- v = -v;
- if(vis[v]) ans++;
- }
- if(vis[v])continue;
- vis[v]=;
- for(int i = ; i < mp[v].size(); i++)
- {
- ll tmp = mp[v][i].first;
- ll tmpc = mp[v][i].second;
- if( dis[tmp] >= dis[v] + tmpc )
- {
- dis[tmp] = dis[v] + tmpc;
- q.push(make_pair(-1ll*dis[tmp], tmp));
- }
- }
- }
- printf("%lld\n",ans);
- return ;
- }
Codeforces-450D-Jzzhu and Cities+dji的更多相关文章
- Codeforces 450D Jzzhu and Cities [heap优化dij]
#include<bits/stdc++.h> #define MAXN 100050 #define MAXM 900000 using namespace std; struct st ...
- Codeforces C. Jzzhu and Cities(dijkstra最短路)
题目描述: Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- [Codeforces 449B] Jzzhu and Cities
[题目链接] https://codeforces.com/contest/449/problem/B [算法] 最短路 时间复杂度 : O(N ^ 2) [代码] #include<bits/ ...
- codeforces 449B Jzzhu and Cities (Dij+堆优化)
输入一个无向图<V,E> V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...
- Codeforces 450D:Jzzhu and Cities(最短路,dijkstra)
D. Jzzhu and Cities time limit per test: 2 seconds memory limit per test: 256 megabytes input: stand ...
- Codeforces Round #257 (Div. 2) D题:Jzzhu and Cities 删特殊边的最短路
D. Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 449 B. Jzzhu and Cities
堆优化dijkstra,假设哪条铁路能够被更新,就把相应铁路删除. B. Jzzhu and Cities time limit per test 2 seconds memory limit per ...
- CF449B Jzzhu and Cities (最短路)
CF449B CF450D http://codeforces.com/contest/450/problem/D http://codeforces.com/contest/449/problem/ ...
- CodeForces 450B Jzzhu and Sequences (矩阵优化)
CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...
- CF449B Jzzhu and Cities 迪杰斯特拉最短路算法
CF449B Jzzhu and Cities 其实这一道题并不是很难,只是一个最短路而已,请继续看我的题解吧~(^▽^) AC代码: #include<bits/stdc++.h> #d ...
随机推荐
- TCP加速机制是如何加速的?
一.什么是TCP加速? TCP加速就是在高时延链路提高吞吐量的一系列解决方案. 二.为什么需要对TCP进行加速? 1.传统的TCP拥塞控制算法并不适用于高时延.高误码的链路. 2.随着we ...
- python编码问题——解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
python实现爬虫遇到编码问题: error:UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX ...
- ansible-service
#service#查询服务状态 ansible server01 -m service -a "name=httpd state=started" #停止服务 ansible se ...
- 机房ping监控 smokeping+prometheus+grafana(续) 自动获取各省省会可用IP
一.前言 1.之前的文章中介绍了如何使用smokeping监控全国各省的网络情况:https://www.cnblogs.com/MrVolleyball/p/10062231.html 2.由于之前 ...
- coffeescript 函数 箭头表达式
函数 do可以形成闭包,使方法作用域不受外部变化的影响. 隐式返回最后一个表达式的值 函数调用省略括号 用arguments数组访问传递给函数的所有对象(低可读性) @name为this.name的简 ...
- Spark 系列(三)—— 弹性式数据集RDDs
一.RDD简介 RDD 全称为 Resilient Distributed Datasets,是 Spark 最基本的数据抽象,它是只读的.分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD ...
- Linux下Docker以及portainer相关配置
一.安装使用Docer CE 本文以CentOS 7为例,安装docker CE版本,docker有两种版本,社区版本CE和企业版本EE,此处学习研究以CE版本为例, 两种安装方式可选:1.使用yum ...
- dotnetcore 与 hbase 之一——hbase 环境准备
转载请注明出处www.cnblogs.com/hsxian! 总述 这是一系列针对 .net core (c#) 读取 hbase 的教程.本人苦于找不到 c#的原生 hbase 客户端,多番寻觅之下 ...
- 干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践
1.题记 2018年3月初,萌生了一个想法:对Elasticsearch相关的技术书籍做拆解阅读,该想法源自非计算机领域红火已久的[樊登读书会].得到的每天听本书.XX拆书帮等. 目前市面上Elast ...
- 基于Starling的mask实现
作为一个从c++转过来的程序员,flash原生的自定义mask实在是太好用,能方便实现各种效果,比如新手引导的高亮.viewport效果等.可惜starling的显示对象并不支持mask特性,查阅go ...