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 ...
随机推荐
- 【caffe】三种文件类别:solver,model和weights
@tags: caffe 文件类别 solver文件 是一堆超参数,比如迭代次数,是否用GPU,多少次迭代暂存一次训练所得参数,动量项,权重衰减(即正则化参数),基本的learning rate,多少 ...
- springMVC-自定义数据类型转换器
自定义类型转换器 201603005,今天想了一个问题,Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想, ...
- VisualSVNServerTools(在线修改VisualSVN密码)
采用的是apache htpasswd的命令行参数进行修改,部署时,采用独立的apache server进行. 源码:https://github.com/easonjim/VisualSVNServ ...
- Zabbix网络自动发现规则和自动添加hosts及link模板
Version: zabbix 3.0 一.配置网络发现规则 Device uniqueness criteria:选择主机名作为唯一标识(Configuation Hosts中显示的NAME) 二. ...
- Windows装机必备软件列表
经常装系统,列个List,以后装完之后安装软件直接参照使用!windows版: 输入法: 搜狗输入法(由于长期使用导致此输入法十分熟悉我的输入习惯,以无法自拔).支持Linux.Windows(太穷还 ...
- MVC5-10 ModleBinder那点事
模型绑定器 之前或多或少也提到过模型绑定器,方法的形参就是由模型绑定器把参数绑定上去的,今天就说说ModuleBingder那点事 在MVC中有一个接口叫IModuleBinder // // 摘要: ...
- 使用IDEA进行远程调试
虽然很早以前就只有Eclipse和IDEA都支持远程调试功能的,但是基本没怎么使用过,今天因为紧急处理一个问题,而本地环境搭建起来比较麻烦,所以就使用了IDEA的远程调试功能.因此写一篇文章记录一下. ...
- Linux学习之CentOS--CentOS6.下Mysql数据库的安装与配置
跟着配置,顺利配置完成 http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html
- 将maven工程转成dynamic web project
http://blog.csdn.net/remote_roamer/article/details/51724378 做到最后一步就不行鸟,没有plugin........
- 机器学习实战------利用logistics回归预测病马死亡率
大家好久不见,实战部分一直托更,很不好意思.本文实验数据与代码来自机器学习实战这本书,倾删. 一:前期代码准备 1.1数据预处理 还是一样,设置两个数组,前两个作为特征值,后一个作为标签.当然这是简单 ...