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 ...
随机推荐
- wpf中textbox与textblock有什么区别
textbox是windows.form控件,textblock是WPF控件. 功能类似,但后者功能更强,也节省系统资源 wpf是基于directx技术的系统,向后兼容性更好. textblock只用 ...
- Ubuntu各文件夹功能说明
通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏.除了可能的一个叫/vmlinuz标准的系统引导映像之外 ...
- A.Kaw矩阵代数初步学习笔记 4. Unary Matrix Operations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- Ubuntu 之 Personal Package Archive (PPA)
How do I use software from a PPA? To start installing and using software from a Personal Package Arc ...
- Oracle 应用于.NET平台
1. 回顾ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库集,它存在于.Net Framework中.通常情况下,数据源可以是各种类型的数据库,利用ADO.NET可以访问目前几乎 ...
- 使用IntelliJ IDEA和Maven构建Java web项目并打包部署
爱编程爱分享,原创文章,转载请注明出处,谢谢! http://www.cnblogs.com/fozero/p/6120375.html 一.背景 现在越来越多的人使用IntelliJ IDEA工具进 ...
- Code笔记 之:防盗链(图片)
图片防盗链 参考:http://bbs.csdn.net/topics/330080045 应该是”10种图片防盗的方法“,而不是”10种图片防盗链的方法“,不过看搜索防盗链的人要多一点,所 ...
- jboss jms 实例
最近温习了下EJB和JMS,整理了下思路,和大家分享下P2P和Pub/Sub的demo :JBoss 7 集成了HornetQ,JMS可以在HornetQ中间件运行,有时间在和大家分享关于Horn ...
- Apache配置HTTPS功能
apache配置https 一.yum 安装openssl和openssl-devel,httpd-devel 二.生成证书(也可以从公司的证书颁发机构获取): #建立服务器密钥 openssl ge ...
- C#注释的几种方法
// 单行注释 /**/ 块注释 ///说明注释,注释以后可以自动生成说明文档档 #region 折叠注释,可以将代码折叠 #endregion 只是#region 所在行后面的文字是注释文字,而其它 ...