CF449B Jzzhu and Cities (最短路)
CF449B CF450D
http://codeforces.com/contest/450/problem/D
http://codeforces.com/contest/449/problem/B
Codeforces Round #257 (Div. 2) D
Codeforces Round #257 (Div. 1) B
|
D. Jzzhu and Cities
time limit per test
2 seconds memory limit per test
256 megabytes input
standard input output
standard output Jzzhu is the president of country A. There are n cities numbered from 1 to n in his country. City 1 is the capital of A. Also there are m roads connecting the cities. One can go from city ui to vi (and vise versa) using the i-th road, the length of this road is xi. Finally, there are k train routes in the country. One can use the i-th train route to go from capital of the country to city si (and vise versa), the length of this route is yi. Jzzhu doesn't want to waste the money of the country, so he is going to close some of the train routes. Please tell Jzzhu the maximum number of the train routes which can be closed under the following condition: the length of the shortest path from every city to the capital mustn't change. Input
The first line contains three integers n, m, k (2 ≤ n ≤ 105; 1 ≤ m ≤ 3·105; 1 ≤ k ≤ 105). Each of the next m lines contains three integers ui, vi, xi (1 ≤ ui, vi ≤ n; ui ≠ vi; 1 ≤ xi ≤ 109). Each of the next k lines contains two integers si and yi (2 ≤ si ≤ n; 1 ≤ yi ≤ 109). It is guaranteed that there is at least one way from every city to the capital. Note, that there can be multiple roads between two cities. Also, there can be multiple routes going to the same city from the capital. Output
Output a single integer representing the maximum number of the train routes which can be closed. Sample test(s)
Input
5 5 3 Output
2 Input
2 2 3 Output
2 |
题意:有n个城市,1是首都。给出m条有权无向边(公路),k条由1连接到某个城市的有权无向边(铁路),求在保持首都到各个城市的最短路长度不变的情况下,最多能炸掉多少条铁路。
题解:首都到达同一个城市的铁路只保留最短的,然后进行最短路并统计某个顶点最短路的更新次数,最后只保留长度等于最短路且更新次数为1(只有这一种最短路)的铁路。
设一个c[i]记录i点的更新次数,初始c[首都]为1,其他为0。更新的时候dij和spfa不是小于才更新嘛,小于的时候就c[新点]=c[当前点],等于的时候就c[新点]+=c[当前点],这样c[i]就是最短路的更新次数(最短路的方案数)。
注意CF可是大家都能出数据的,有人出了个卡SPFA的数据,我都吓尿了。可以给SPFA加SLF优化过。有人用优先队列过的,因为还好没人出卡优先队列SPFA的数据…
代码:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) prllf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
#define mp make_pair
#define pb push_back const ll INF=1LL<<; const int maxn=;
const int maxm=;
struct edge {
int v,next;
ll w;
} e[maxm];///边表
int head[maxn],en; void add(int x,int y,ll z) {
e[en].w=z;
e[en].v=y;
e[en].next=head[x];
head[x]=en++;
} int n,m,k;
ll g[maxn];
bool f[maxn];///入队标志
int b[maxn], c[maxn];
ll d[maxn];///b为循环队列,d为起点到各点的最短路长度
void spfa() { ///0~n-1,共n个点,起点为st
int i,k;
int st=, l=, r=;
memset(f,,sizeof(f));
memset(b,,sizeof(b));
for(i=; i<n; i++)
d[i]=INF;
b[]=st;
f[st]=;
d[st]=;
c[st]=;
while(l!=r) {
k=b[l++];
l%=n;
for(i=head[k]; i!=-; i=e[i].next)
if (d[k]+e[i].w < d[e[i].v]) {
d[e[i].v]=d[k] + e[i].w;
c[e[i].v]=c[k];
if (!f[e[i].v]) {
if(d[e[i].v]>d[b[l]]) {///SLF优化,这题卡没优化的SPFA……
b[r++]=e[i].v;
r%=n;
} else {
l--;
if(l==-)l=n-;
b[l]=e[i].v;
}
f[e[i].v]=;
}
} else if(d[k]+e[i].w == d[e[i].v])
c[e[i].v]+=c[k];
f[k]=;
}
} void init() {
memset(head,-,sizeof(head));
en=;
} int main() {
int i,x,y;
ll z;
while(scanf("%d%d%d",&n,&m,&k)!=EOF) {
init();
REP(i,m) {
scanf("%d%d%I64d",&x,&y,&z);
x--;
y--;
add(x,y,z);
add(y,x,z);
} REP(i,n) g[i]=INF; REP(i,k) {
scanf("%d%I64d",&x,&z);
x--;
if(z<g[x]) g[x]=z;
} REP(i,n)
if(g[i]!=INF) {
add(,i,g[i]);
add(i,,g[i]);
} memset(c,,sizeof(c));
spfa(); int remain=;
REP(i,n)
if(g[i]!=INF && c[i]== && d[i]==g[i])
remain++;
printf("%d\n",k-remain);
}
return ;
}
CF449B Jzzhu and Cities (最短路)的更多相关文章
- CF449B Jzzhu and Cities 迪杰斯特拉最短路算法
CF449B Jzzhu and Cities 其实这一道题并不是很难,只是一个最短路而已,请继续看我的题解吧~(^▽^) AC代码: #include<bits/stdc++.h> #d ...
- 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 C. Jzzhu and Cities(dijkstra最短路)
题目描述: Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 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 449 B. Jzzhu and Cities
堆优化dijkstra,假设哪条铁路能够被更新,就把相应铁路删除. B. Jzzhu and Cities time limit per test 2 seconds memory limit per ...
- D. Jzzhu and Cities
Jzzhu is the president of country A. There are n cities numbered from 1 to n in his country. City 1 ...
- codeforces 449B Jzzhu and Cities (Dij+堆优化)
输入一个无向图<V,E> V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...
- Codeforces Round #257(Div.2) D Jzzhu and Cities --SPFA
题意:n个城市,中间有m条道路(双向),再给出k条铁路,铁路直接从点1到点v,现在要拆掉一些铁路,在保证不影响每个点的最短距离(距离1)不变的情况下,问最多能删除多少条铁路 分析:先求一次最短路,铁路 ...
- Jzzhu and Cities
CF #257 div2D:http://codeforces.com/contest/450/problem/D 题意:给你n个城市,m条无向有权边.另外还有k条边,每条边从起到到i.求可以删除这k ...
随机推荐
- NOI题库分治算法刷题记录
今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...
- xudyh的gcd模板
hdu 5019 #include <cstdlib> #include <cctype> #include <cstring> #include <cstd ...
- 洛谷P1629 邮递员送信
题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...
- ecshop /includes/lib_base.php、/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php Backdoor Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECShop是国内一款流行的网店管理系统软件,其2.7.3版本某个补丁存 ...
- editGrid分录表格
waf("分录id").wafGrid("setCellEditorAllConfig", "字段名", "filteritem& ...
- django入门记录 1
步骤: 1 安装python和django 2 创建项目python-admin startproject mysite(此处可以替换) 3 至少需要一个数据表,所以要创建一个表 python ...
- 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案
今天直接开门见山了,直接说配置吧.首先介绍下我这的环境 如有问题,请联系我18500777133@sina.cn IP 安装软件 192.168.1.7 lvs1+keepalived master角 ...
- json转换成对象
在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...
- arcglobe 图层三大类说明
若是第一次打开,且在网络连接通畅的情况下,你会发现目录中已有部分数据层,这些数据层是由ArcGIS Online的在线数据:Imagery图层即在线的影像数据.高程数据.地名数据.运输线数据. Arc ...
- VMWare12虚拟CentOS7共享文件的过程
环境: 宿主机:Win10企业版,虚拟机:VMware pro12.5,虚拟OS:CentOS7.0 过程: VMware菜单:虚拟机->设置->选项,选中宿主机要共享的磁盘或目录,点击确 ...