输入一个无向图<V,E>    V<=1e5, E<=3e5

现在另外给k条边(u=1,v=s[k],w=y[k])

问在不影响从结点1出发到所有结点的最短路的前提下,最多可以删除k条边的多少条

跑最短路的时候维护或者统计就好了

一开始用spfa.然后TLE 45...好久没写  Dij+堆优化   ...

p.s.优先队列默认大顶堆

Dij+堆优化   264ms

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <string>
using namespace std; #define ll long long
#define maxn 100010
#define maxm 700010 int head[maxn];
struct edge{
int v,w,nxt;
}e[maxm];
int E;
void init(){E=;memset(head,-,sizeof(head));}
void addedge(int u,int v,int w){
e[E].v=v,e[E].w=w,e[E].nxt=head[u];
head[u]=E++;
}
priority_queue<pair<ll,int> >que;
bool vis[maxn];
//ll d[maxn];
int main(){
int n,m,k;
while(~scanf("%d%d%d",&n,&m,&k)){
init();
for(int i=;i<m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
que.push(make_pair(0ll,));
for(int i=;i<k;++i){
int s,y;
scanf("%d%d",&s,&y);
que.push(make_pair(0ll-y,-s));
}
memset(vis,false,sizeof(vis));
int ans=;
while(!que.empty()){
pair<ll,int> tmp = que.top();que.pop();
ll dis = -tmp.first;
int u = tmp.second;
if(u<){
u=-u;
if(vis[u])++ans;
}
if(vis[u]) continue;
vis[u]=true;
//d[u] = dis;
for(int i=head[u];i!=-;i=e[i].nxt)
if(vis[e[i].v]==false)
que.push(make_pair( -dis-e[i].w, e[i].v));
}
printf("%d\n",ans);
}
return ;
}

spfa  TLE 45

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <string>
using namespace std; #define ll long long
#define maxn 100010
#define maxm 700010 int head[maxn];
struct edge{
int v,w,nxt;
int k;
}e[maxm];
int E;
void init(){E=;memset(head,-,sizeof(head));}
void addedge(int u,int v,int w,int kind){
e[E].v=v,e[E].w=w,e[E].nxt=head[u];
e[E].k = kind;
head[u]=E++;
}
int q[maxn];
bool inq[maxn];
bool bus[maxn];
ll dis[maxn];
void spfa(){
int hd=,tl=;
q[tl++]=;
memset(dis,0x3f,sizeof(dis));
dis[]=;
memset(inq,false,sizeof(inq));
inq[]=true;
memset(bus,false,sizeof(bus));
while(hd!=tl){
int u = q[hd++];
if(hd==maxn)hd=;
inq[u] = false;
for(int i=head[u];i!=-;i=e[i].nxt){
int v = e[i].v, w = e[i].w, k = e[i].k;
if(dis[u]+w < dis[v]){
dis[v] = dis[u]+w;
bus[v] = false;
if(k==) bus[v]=true;
if(inq[v]==false){
inq[v]=true;
q[tl++]=v;
if(tl==maxn)tl=;
}
}else if(dis[u]+w == dis[v]){
if(k==) bus[v]=true;
}
}
}
}
int si[],yi[];
int main(){
int n,m,k;
while(~scanf("%d%d%d",&n,&m,&k)){
init();
for(int i=;i<m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w,);
addedge(v,u,w,);
}
for(int i=;i<k;++i){
scanf("%d%d",si+i,yi+i);
addedge(,si[i],yi[i],);
}
spfa();
int ans=;
for(int i=;i<k;++i){
int v = si[i];
if(dis[v] < yi[i]) ++ans;
else {
if(bus[v]==false)bus[v]=true;
else ++ans;
}
}
printf("%d\n",ans);
}
return ;
}

codeforces 449B Jzzhu and Cities (Dij+堆优化)的更多相关文章

  1. [Codeforces 449B] Jzzhu and Cities

    [题目链接] https://codeforces.com/contest/449/problem/B [算法] 最短路 时间复杂度 : O(N ^ 2) [代码] #include<bits/ ...

  2. Codeforces C. Jzzhu and Cities(dijkstra最短路)

    题目描述: Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. CodeForces 450B Jzzhu and Sequences (矩阵优化)

    CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...

  4. dij+堆优化

    写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个: 香甜的奶油: #include<iostream> #include<cstdio> #include<cs ...

  5. 迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少

    首先来一段百度百科压压惊... 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最 ...

  6. Codeforces 450D Jzzhu and Cities [heap优化dij]

    #include<bits/stdc++.h> #define MAXN 100050 #define MAXM 900000 using namespace std; struct st ...

  7. Codeforces449A Jzzhu and Chocolate && 449B Jzzhu and Cities

    CF挂0了,简直碉堡了.两道题都是正确的思路但是写残了.写个解题报告记录一下心路历程. A题问的是 一个n*m的方块的矩形上切k刀,最小的那一块最大可以是多少.不难发现如果纵向切k1刀,横向切k2刀, ...

  8. dijkstra最短路算法(堆优化)

    这个算法不能处理负边情况,有负边,请转到Floyd算法或SPFA算法(SPFA不能处理负环,但能判断负环) SPFA(SLF优化):https://www.cnblogs.com/yifan0305/ ...

  9. Codeforces 449 B. Jzzhu and Cities

    堆优化dijkstra,假设哪条铁路能够被更新,就把相应铁路删除. B. Jzzhu and Cities time limit per test 2 seconds memory limit per ...

随机推荐

  1. 为什么构造器不能是abstract, static, final, native or synchronized的?

    Unlike methods, a constructor cannot be abstract, static, final, native  or synchronized. 1. A const ...

  2. php操作mysql数据库

    <span style="font-family:Arial,Helvetica,sans-serif">在php操作数据库过,会频繁对数据库进行各种操作,所以,php ...

  3. CSS 和 JS 文件合并工具

    写 CSS 和 JavaScript 的时候, 我们会遇到一个两难的局面: 要么将代码写在一个大文件, 要么将代码分成多个文件. 前者导致文件难以管理, 代码复用性差, 后者则因为需要在载入多个文件令 ...

  4. Ubuntu 14 安装Java(JRE、JDK)

    JRE vs OpenJDK vs Oracle JDK JRE(Java Runtime Environment),它是你运行一个基于Java语言应用程序的所正常需要的环境.如果你不是一个程序员的话 ...

  5. PHPStorm Xdebug配置

    下载PHSTORM https://download.jetbrains.com/webide/PhpStorm-2016.1.2.exe http://idea.lanyus.com/查找授权服务器 ...

  6. [HDU3709]Balanced Number

    [HDU3709]Balanced Number 试题描述 A balanced number is a non-negative integer that can be balanced if a ...

  7. [转载]JavaEE学习篇之——JDBC详解

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629 目录1.摘要2.JDBC的使用步骤 1.注册驱动 只做一次 ...

  8. java中的jComBox的基本用法

    jComBox获取选中的字符串 getSelectedItem().toString()返回一个字符串 getSelectedItem()返回一个对象. getSelectedIndex()得到选择值 ...

  9. PHP中九大缓存技术总结

    PHP缓存包括PHP编译缓存和PHP数据缓存两种.PHP是一种解释型语言,属于边编译边运行的那种.这种运行模式的优点是程序修改很方便,但是运行效率却很低下.PHP编译缓存针对这种情况做改进处理,使得P ...

  10. java抓取快递100信息接口

    package zeze; import java.io.IOException; import org.json.JSONArray; import org.json.JSONException; ...