题面:

传送门

思路:

真·动态最短路

但是因为每次只加1

所以可以每一次修改操作的时候使用距离分层的bfs,在O(n)的时间内解决修改

这里要用到一个小技巧:

把每条边(u,v)的边权表示为dis[u]+w(u,v)-dis[v],这样边权实际上变成了“这条边离作为最短路的一份子还差了多少”

然后在用这个边权的新图里面更新1到每个点的最短路,再用原来的dis加上这个值,就是当前的最短路了

实际上是把绝对数值转化为了“离最优解的距离”,以此解题

Code:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define inf 1e15
#define mp make_pair
using namespace std;
inline int read(){
int re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
int n,m,cnt,first[];ll dis[];
struct edge{
int to,next,w;
}a[];
inline void add(int u,int v,int w){
a[++cnt]=(edge){v,first[u],w};first[u]=cnt;
}
struct node{
int x;node(){x=;}
node(int xx){x=xx;}
bool operator <(node r) const {
return dis[x]>dis[r.x];
}
};
int delta[];
priority_queue<node>qq;
void spfa(){
int i,u,v;
for(i=;i<=n;i++) dis[i]=inf;
dis[]=;qq.push(node());
while(!qq.empty()){
u=qq.top().x;qq.pop();
for(i=first[u];~i;i=a[i].next){
v=a[i].to;
if(dis[v]>dis[u]+(ll)a[i].w){
dis[v]=dis[u]+(ll)a[i].w;
qq.push(node(v));
}
}
}
}
queue<int>q[];
void bfs(){
memset(delta,0x3f,sizeof(delta));
int i,j,u,v,w,maxn,head=,tail=;
q[].push();delta[]=maxn=;
for(i=;i<=maxn;i++){
while(!q[i].empty()){
u=q[i].front();q[i].pop();
if(i>delta[u]) continue;
for(j=first[u];~j;j=a[j].next){
v=a[j].to;w=a[j].w;
if(delta[v]>delta[u]+dis[u]+w-dis[v]){
delta[v]=delta[u]+dis[u]+w-dis[v];
if(delta[v]<=n){
q[delta[v]].push(v);maxn=max(maxn,delta[v]);
}
}
}
}
}
}
int main(){
// freopen("d.in","r",stdin);
memset(first,-,sizeof(first));
int i,j,t1,t2,t3,Q;
n=read();m=read();Q=read();
for(i=;i<=m;i++){
t1=read();t2=read();t3=read();
add(t1,t2,t3);
}
spfa();
for(i=;i<=Q;i++){
t1=read();
if(t1==) t2=read(),printf("%I64d\n",(dis[t2]>=inf)?-:dis[t2]);
else{
t2=read();
memset(delta,,sizeof(delta));
for(j=;j<=t2;j++) t3=read(),a[t3].w++;
bfs();
for(j=;j<=n;j++) dis[j]+=(ll)delta[j];
// cout<<endl;
}
}
// system("pause");
return ;
}

cf 843 D Dynamic Shortest Path [最短路+bfs]的更多相关文章

  1. [CF843D]Dynamic Shortest Path

    [CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...

  2. Dynamic Shortest Path CodeForces - 843D (动态最短路)

    大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路. 本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为 ...

  3. 【CF edu 27 G. Shortest Path Problem?】

    time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...

  4. CF843D Dynamic Shortest Path spfa+剪枝

    考试的T3,拿暴力+剪枝卡过去了. 没想到 CF 上也能过 ~ code: #include <bits/stdc++.h> #define N 100004 #define LL lon ...

  5. HDU 4725 The Shortest Path in Nya Graph (最短路)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  6. ZOJ 2760 - How Many Shortest Path - [spfa最短路][最大流建图]

    人老了就比较懒,故意挑了到看起来很和蔼的题目做,然后套个spfa和dinic的模板WA了5发,人老了,可能不适合这种刺激的竞技运动了…… 题目链接:http://acm.zju.edu.cn/onli ...

  7. HDU4725:The Shortest Path in Nya Graph(最短路)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. HDU - 3631 Shortest Path(Floyd最短路)

    Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...

  9. hdu 4725 The Shortest Path in Nya Graph (最短路+建图)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. securetextentry 切换后有空格问题解决

    搜索发现这个问题,网上的解决方法不明确,对于小白怎么办 直接上代码: - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundCo ...

  2. Go - 环境安装

    目录 你好,Go语言 环境安装 目录结构 命令 开发工具 学习网址 小结 你好,Go语言 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. 因工作需要,准备入坑,先从环境安装开始 ...

  3. 选中ListBox控件中的全部项

    实现效果: 知识运用: ListBox控件的SelectedItems属性 //获取ListBox控件中被选中数据项的集合 public ListBox.SelectedObjectCollectio ...

  4. 2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序

    //冒泡排序 public class demo{ public static void main(String[] args) { int[] sum={2,9,10,1,5,88}; System ...

  5. CUDA入门需要知道的东西

    CUDA刚学习不久,做毕业要用,也没时间研究太多的东西,我的博客里有一些我自己看过的东西,不敢保证都特别有用,但是至少对刚入门的朋友或多或少希望对大家有一点帮助吧,若果你是大牛请指针不对的地方,如果你 ...

  6. 移动端rem匹配

    Rem是相对于根元素font-size大小的单位 记inphone5屏幕宽度是 320px font-size16px 1rem=16px <html>   <head>    ...

  7. WP Mail SMTP插件解决Contact Form 7表单提交失败问题

    WP Mail SMTP插件解决Contact Form 7表单提交失败问题 WP Mail SMTP是一款非常优秀的解决WordPress主机因为不支持或者是禁用了mail()函数,导致无法实现在线 ...

  8. 支持无限加载的js图片画廊插件

    natural-gallery-js是一款支持无限加载的js图片画廊插件.该js图片画廊支持图片的懒加载,可以对图片进行搜索,分类,还可以以轮播图的方式来展示和切换图片. 使用方法 在页面中引入下面的 ...

  9. 【思维题 最大权闭合子图】loj#6045. 「雅礼集训 2017 Day8」价

    又是经典模型的好题目 题目描述 人类智慧之神 zhangzj 最近有点胖,所以要减肥,他买了 NN 种减肥药,发现每种减肥药使用了若干种药材,总共正好有 NN 种不同的药材. 经过他的人脑实验,他发现 ...

  10. 二十一、MySQL NULL 值处理

    MySQL NULL 值处理 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. ...