cf 843 D Dynamic Shortest Path [最短路+bfs]
题面:
思路:
真·动态最短路
但是因为每次只加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]的更多相关文章
- [CF843D]Dynamic Shortest Path
[CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...
- Dynamic Shortest Path CodeForces - 843D (动态最短路)
大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路. 本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为 ...
- 【CF edu 27 G. Shortest Path Problem?】
time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...
- CF843D Dynamic Shortest Path spfa+剪枝
考试的T3,拿暴力+剪枝卡过去了. 没想到 CF 上也能过 ~ code: #include <bits/stdc++.h> #define N 100004 #define LL lon ...
- 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 ...
- ZOJ 2760 - How Many Shortest Path - [spfa最短路][最大流建图]
人老了就比较懒,故意挑了到看起来很和蔼的题目做,然后套个spfa和dinic的模板WA了5发,人老了,可能不适合这种刺激的竞技运动了…… 题目链接:http://acm.zju.edu.cn/onli ...
- 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 ...
- HDU - 3631 Shortest Path(Floyd最短路)
Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...
- 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 ...
随机推荐
- securetextentry 切换后有空格问题解决
搜索发现这个问题,网上的解决方法不明确,对于小白怎么办 直接上代码: - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundCo ...
- Go - 环境安装
目录 你好,Go语言 环境安装 目录结构 命令 开发工具 学习网址 小结 你好,Go语言 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. 因工作需要,准备入坑,先从环境安装开始 ...
- 选中ListBox控件中的全部项
实现效果: 知识运用: ListBox控件的SelectedItems属性 //获取ListBox控件中被选中数据项的集合 public ListBox.SelectedObjectCollectio ...
- 2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序
//冒泡排序 public class demo{ public static void main(String[] args) { int[] sum={2,9,10,1,5,88}; System ...
- CUDA入门需要知道的东西
CUDA刚学习不久,做毕业要用,也没时间研究太多的东西,我的博客里有一些我自己看过的东西,不敢保证都特别有用,但是至少对刚入门的朋友或多或少希望对大家有一点帮助吧,若果你是大牛请指针不对的地方,如果你 ...
- 移动端rem匹配
Rem是相对于根元素font-size大小的单位 记inphone5屏幕宽度是 320px font-size16px 1rem=16px <html> <head> ...
- WP Mail SMTP插件解决Contact Form 7表单提交失败问题
WP Mail SMTP插件解决Contact Form 7表单提交失败问题 WP Mail SMTP是一款非常优秀的解决WordPress主机因为不支持或者是禁用了mail()函数,导致无法实现在线 ...
- 支持无限加载的js图片画廊插件
natural-gallery-js是一款支持无限加载的js图片画廊插件.该js图片画廊支持图片的懒加载,可以对图片进行搜索,分类,还可以以轮播图的方式来展示和切换图片. 使用方法 在页面中引入下面的 ...
- 【思维题 最大权闭合子图】loj#6045. 「雅礼集训 2017 Day8」价
又是经典模型的好题目 题目描述 人类智慧之神 zhangzj 最近有点胖,所以要减肥,他买了 NN 种减肥药,发现每种减肥药使用了若干种药材,总共正好有 NN 种不同的药材. 经过他的人脑实验,他发现 ...
- 二十一、MySQL NULL 值处理
MySQL NULL 值处理 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. ...