大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路.

本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为差值最短路, 这样边权就在n-1以内, 可以直接暴力跑桶优化dijkstra.

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<ll,int> pli; const int N = 1e5+10;
const ll INF = 0x3f3f3f3f3f3f3f3f;
int n, m, q;
struct _ {int to,w;} E[N];
vector<int> g[N];
int vis[N], d2[N];
ll d[N];
priority_queue<pli,vector<pli>, greater<pli> > Q;
queue<int> q2[N]; void Dij() {
memset(d,0x3f,sizeof d);
Q.push(pli(d[1]=0,1));
while (Q.size()) {
int u = Q.top().y; Q.pop();
if (vis[u]) continue;
vis[u] = 1;
for (auto &&id:g[u]) {
auto &e = E[id];
ll dd = d[u]+e.w;
if (dd<d[e.to]) Q.push(pli(d[e.to]=dd,e.to));
}
}
}
void Dij2(int k) {
REP(i,1,k) {int t; scanf("%d", &t), ++E[t].w;}
memset(d2,0x3f,sizeof d2);
q2[0].push(1), d2[1] = 0;
int mx = 0;
REP(i,0,mx) while (q2[i].size()) {
int u = q2[i].front(); q2[i].pop();
if (d2[u]<i) continue;
for (auto &&id:g[u]) {
auto &e = E[id];
int dd = d2[u]+(e.w+d[u]-d[e.to]);
if (dd<d2[e.to]) {
d2[e.to] = dd;
if (dd<=min(n-1,k)) {
q2[dd].push(e.to);
mx = max(mx, dd);
}
}
}
}
REP(i,1,n) d[i]=min(INF,d[i]+d2[i]);
} int main() {
scanf("%d%d%d", &n, &m, &q);
REP(i,1,m) {
int u;
scanf("%d%d%d", &u, &E[i].to, &E[i].w);
g[u].pb(i);
}
Dij();
while (q--) {
int op, x;
scanf("%d%d", &op, &x);
if (op==1) printf("%lld\n", d[x]<INF?d[x]:-1);
else Dij2(x);
}
}

Dynamic Shortest Path CodeForces - 843D (动态最短路)的更多相关文章

  1. [CF843D]Dynamic Shortest Path

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

  2. cf 843 D Dynamic Shortest Path [最短路+bfs]

    题面: 传送门 思路: 真·动态最短路 但是因为每次只加1 所以可以每一次修改操作的时候使用距离分层的bfs,在O(n)的时间内解决修改 这里要用到一个小技巧: 把每条边(u,v)的边权表示为dis[ ...

  3. Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)

    https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...

  4. HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意:有N个点和N层..一层有X个点(0<=X<=N).两邻两层间有一条路花费C.还有M ...

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 如果直接建图复杂度过大,但是考虑到每层之间的有效边很少,只要在每层增加两个虚拟节点n+i和2*n ...

  6. CF843D Dynamic Shortest Path spfa+剪枝

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

  7. 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 ...

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

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

  9. Codeforces Beta Round #3 A. Shortest path of the king 水题

    A. Shortest path of the king 题目连接: http://www.codeforces.com/contest/3/problem/A Description The kin ...

随机推荐

  1. 1823: [JSOI2010]满汉全席 2-sat

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1823 思路 建图,缩点tarjan 判断impossible 代码 #include < ...

  2. newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解

    题目描述 筱玛是个快乐的男孩子. 寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险. 迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j. 入口在左上角的(1,1)处,出口在右下 ...

  3. C# DateTime判断时间

    两种情况: 1 DateTime? dtTemp = null; if(dtTime != null) { //wawawa } 刚刚学会的,可空值类型,可判断是否赋值 2 DateTime dtTe ...

  4. P3727 曼哈顿计划E

    点分治+SG函数还真是令人意外的组合啊 思路 这道题看到找一条满足条件的链,想到点分治 看到博弈,想到SG函数 然后就变成一道SG函数+点分治的题了 然后1e9的SG函数怎么搞?当然是打表了 然后各种 ...

  5. java 反射工具

    <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</ ...

  6. dataTable表头未对其解决方法

    本文为博主原创,未经允许不得转载: 在tab页中使用dataTable时,默认显示的dataTable表头与数据显示正常,另一个的datatable则表头与数据未对其. 检查元素发现,datatabl ...

  7. PTA 输出全排列(20 分)

    7-2 输出全排列(20 分) 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出正整数n(<10). ...

  8. sublime 代码段

    demo 展示助手中有经常用到个标签. <textarea type="text/md_x" style="display:none"> ## de ...

  9. 基于SVM的python简单实现验证码识别

    验证码识别是一个适合入门机器学习的项目,之前用knn 做过一个很简单的,这次用svm来实现.svm直接用了开源的库libsvm.验证码选的比较简单,代码也写得略乱,大家看看就好. 1. 爬取验证码图片 ...

  10. python 安装插件 requests、BeautifulSoup

    安装第三方插件库 1. requests  , 下载地址 https://github.com/requests/requests 安装: 利用 pip 安装 pip3 install request ...