2725. [Violet 6]故乡的梦(删边最短路同[TJOI2012]桥)

2725. [Violet 6]故乡的梦

和P2685 [TJOI2012]桥可以说是一模一样,判断u,vu,vu,v是否在最短路径上可以利用之前预处理的id[]详细看代码。

#include<map>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
using pli=pair<long long,int>;
constexpr int N=200010,M=400010;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
int h[N],e[M],ne[M],w[M],idx;
void add(int a,int b,int c){e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;}
int n,m;
bool st[N];
ll d1[N],dn[N];
int path[N],cnt,id[N];
bool in[M];
int L[N],R[N];
ll ans[N];
map<pii,int> mp;
int S,T;void dijkstra(int S,ll d[])
{memset(d,0x3f,(n+1)*sizeof(ll));memset(st,0,sizeof st);d[S]=0;priority_queue<pli,vector<pli>,greater<pli> >q;q.push({0,S});while(q.size()){int u=q.top().second;q.pop();if(st[u]) continue;st[u]=1;for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(d[v]<=d[u]+w[i]) continue;d[v]=d[u]+w[i];q.push({d[v],v});}}
}
void bfs(int k,ll d[],int f[])
{queue<int> q;q.push(path[k]);f[path[k]]=k;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(!id[v]&&!f[v]&&d[u]+w[i]==d[v]) f[v]=k,q.push(v);}}
}
struct node
{int l,r;ll v;
}tree[N<<2];
void build(int u,int l,int r)
{tree[u]={l,r,INF};if(l==r) return;int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);
}
void modify(int u,int l,int r,ll x)
{if(tree[u].l>=l&&tree[u].r<=r) return tree[u].v=min(tree[u].v,x),void();int mid=tree[u].l+tree[u].r>>1;if(l<=mid) modify(u<<1,l,r,x);if(r>mid) modify(u<<1|1,l,r,x);
}
void pushdown(int u)
{if(tree[u].l==tree[u].r){ans[tree[u].l]=tree[u].v;return;}tree[u<<1].v=min(tree[u<<1].v,tree[u].v);tree[u<<1|1].v=min(tree[u<<1|1].v,tree[u].v);int mid=tree[u].l+tree[u].r>>1;pushdown(u<<1),pushdown(u<<1|1);}
int onpath(int u,int v)
{if(!id[u]||!id[v]) return 0;if(id[u]+1==id[v]) return id[u];if(id[v]+1==id[u]) return id[v];return 0;
}
int main()
{cin>>n>>m;memset(h,-1,sizeof h);for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;add(a,b,c),add(b,a,c);}cin>>S>>T;dijkstra(S,d1),dijkstra(T,dn);// 预处理1->n路径上的点int u=S;while(u!=T){path[++cnt]=u;id[u]=cnt;for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(dn[v]+w[i]==dn[u]) {in[i]=1;u=v;break;}}}path[++cnt]=T;id[T]=cnt;for(int i=1;i<=cnt;i++) bfs(i,d1,L),bfs(i,dn,R);--cnt;build(1,1,cnt);for(int u=1;u<=n;u++)for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(!in[i]&&L[u]<R[v])modify(1,L[u],R[v]-1,d1[u]+w[i]+dn[v]);}pushdown(1);int q;cin>>q;while(q--){int u,v;cin>>u>>v;ll res=onpath(u,v)?ans[onpath(u,v)]:d1[T];if(res==INF) cout<<"Infinity\n";else cout<<res<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈.NET Core中基于Generic Host来实现后台任务

前言很多时候&#xff0c;后台任务对我们来说是一个利器&#xff0c;帮我们在后面处理了成千上万的事情。在.NET Framework时代&#xff0c;我们可能比较多的就是一个项目&#xff0c;会有一到多个对应的Windows服务&#xff0c;这些Windows服务就可以当作是我们所说的后台任务…

P3971-[TJOI2014]Alice and Bob【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P3971 题目大意 一个1∼n1\sim n1∼n的一个排列&#xff0c;设aia_iai​表示以iii结尾的最长上升子序列长度&#xff0c;bib_ibi​表示以iii开头的最长下降子序列长度。 给出序列aaa求序列bbb的最大和。 1≤n≤1051\leq n\l…

牛客题霸 [平衡二叉树] C++题解/答案

牛客题霸 [平衡二叉树] C题解/答案 题目描述 输入一棵二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 题解&#xff1a; 今天上数据结构刚考了平衡二叉树 平衡二叉树定义(AVL)&…

2018 KubeCon + CloudNativeCon完美落幕,行云献力

2018年11月13-15日&#xff0c;由云原生计算基金会&#xff08;CNCF&#xff09;组织的KubeConCloudNativeCon首次登陆中国。经过了三天的技术交流和展示&#xff0c;大会随着15日下午最后一个议程的结束而完美落幕。作为云原生领域全球最大的峰会&#xff0c;KubeConCloudNati…

atcoder E - Greedy Ant(最优解等价+dp)

E - Greedy Ant Grice题解最开始看不懂神的思路&#xff0c;还评论请教了一波应该是个集训队大佬QaQ snuke在当前轮直接选取&#xff0c;那么状态会非常不好记录 我们保留snuke在之前轮&#xff0c;选择放弃暂时不选的次数&#xff0c;然后等蚂蚁走到这来了再选 虽然这个跟原游…

P4884-多少个1?【BSGS】

正题 题目链接:https://www.luogu.com.cn/problem/P4884 题目大意 求一个最小的nnn使得nnn个连续的111其在模mmm意义下等于kkk。 6≤m≤1011,0<k<m6\leq m\leq 10^{11},0<k<m6≤m≤1011,0<k<m 解题思路 补一道老题 nnn个连续的111就是10n−19\frac{10^n-1…

牛客题霸 [进制转换] C++题解/答案

进制转换 题目描述 给定一个十进制数M&#xff0c;以及需要转换的进制数N。将十进制数M转化为N进制数 题解&#xff1a; 看似简单的进制转换套路非常多 1.M是32位整数&#xff0c;有可能是负数&#xff0c;所以还要特判一下 2.N的范围是[2,16]&#xff0c;大于10要用ABCD来…

魔方Newlife.Cube权限系统的使用及模版覆盖详解

讲人&#xff1a;大石头时间&#xff1a;2018-11-14 晚上20&#xff1a;00地点&#xff1a;钉钉群&#xff08;组织代码BKMV7685&#xff09;QQ群&#xff1a;1600800内容&#xff1a;魔方Newlife.Cube权限系统的使用及模版覆盖详解准备源码地址: https://github.com/NewLifeX/…

P4383 [八省联考2018]林克卡特树(树形dp+wqs二分)

[八省联考2018]林克卡特树 题目大意&#xff1a;给定一棵有负权边的树&#xff0c;现在必须恰好删去kkk条边&#xff0c;并加上恰好kkk条权值为000的边&#xff0c;要求最大化它的直径长度。 首先考虑删去KKK条边的效果&#xff1a;把整棵树变成k1k1k1个连通块 然后用0权变把这…

bzoj4025-二分图【线段树分治,并查集】

正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 nnn个点mmm条边&#xff0c;每条边会在一个TTT以内的时间段内出现&#xff0c;对于任意一个TTT以内的时刻求图是否是一个二分图。 1≤n,T≤105,1≤m≤21051\leq n,T\leq 10^5,1\leq m\leq 2\times 10^51≤n,T≤105,1…

牛客题霸 [删除有序链表中重复的元素] C++题解/答案

牛客题霸 [删除有序链表中重复的元素] C题解/答案 题目描述 删除给出链表中的重复元素&#xff08;链表中元素从小到大有序&#xff09;&#xff0c;使链表中的所有元素都只出现一次 例如&#xff1a; 给出的链表为1\to1\to21→1→2,返回1 \to 21→2. 给出的链表为1\to1\to 2 \…

我在微软做研发 | 亚洲创新的科研之力

丹棱君有话说&#xff1a;在庆祝微软亚洲研究院成立 20 周年之际&#xff0c;微软亚洲研究院的几位科学家向我们讲述了在这里&#xff0c;如何以科研热情推动了技术创新。走进微软亚洲研究院的办公园区&#xff0c;便会被这里安静的研究氛围所包围。在当今越来越多追求速度、提…

codeforces1208 F. Bits And Pieces(SOS DP)

heyuhhh高维前缀和总结 SOS DP SOS Dynamic Programming [Tutorial] 之前写过相关的题目枚举子集dp 枚举子集 F[mask]∑i∈maskA[i],i&maskiF[mask]\sum_{i\in mask}A[i],i\&maskiF[mask]i∈mask∑​A[i],i&maski 方法1&#xff0c;O(4n)O(4^n)O(4n)暴力枚举 for(…

P5956-[POI2017]Podzielno【数学】

正题 题目链接:https://www.luogu.com.cn/problem/P5956 题目大意 BBB进制下&#xff0c;给出序列aaa&#xff0c;aia_iai​表示数字iii有多少个。求一个最大的XXX在BBB进制下&#xff0c;由给出的数字组成&#xff08;不一定要用完&#xff09;&#xff0c;且其是B−1B-1B−1…

牛客题霸 [回文数字(palindrome-number)] C++题解/答案

牛客题霸 [回文数字] C题解/答案 题解: 首先&#xff1a;负数不可以回文&#xff08;起码看着就不对称&#xff09; 然后我们将x翻转&#xff0c;很简单sumsum*10x%10; 因为x最终会变成0&#xff0c;所以用y先存一下x 最后比较sum与y是否相等 面试&#xff1a; class Solut…

codeforces1494 D. Dogeforces(构造)

昨晚1h20min做完了3个题&#xff0c;看下排名600左右&#xff0c;感觉稳可以上分了&#xff0c;于是看了下D构造&#xff1f;感觉不太会没细想于是看了看E感觉好像和之前有一个题目很像&#xff08;那个题我讨论了好长时间&#xff09;&#xff0c;然后磨叽磨叽还有20min感觉写…

P4126-[AHOI2009]最小割【网络流,tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4126 题目大意 给出nnn个点mmm条边的一张有向图和起点终点。对于每条边求其是否是最小割的可行割/必须割 1≤n≤4000,1≤m≤600001\leq n\leq 4000,1\leq m\leq 600001≤n≤4000,1≤m≤60000 解题思路 一些结论吧&#xff…

调试.NET CORE代码

前言core也用了很长一段时间了&#xff0c;发现很多小伙伴不知道如何调试core的代码。可想而知&#xff0c;以前使用mvc的时候&#xff0c;不需要发布代码&#xff0c;直接iis地址指向项目源码&#xff0c;然后附加到进程w3wp.exe就可以调试了。在core的项目里面已经不能这样玩…

牛客题霸 [二叉树中是否存在节点和为指定值的路径] C++题解/答案

牛客题霸 [二叉树中是否存在节点和为指定值的路径] C题解/答案 题目描述 给定一个二叉树和一个值\ sum sum&#xff0c;判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径&#xff0c; 例如&#xff1a; 给出如下的二叉树&#xff0c;\ sum22 sum22&#xff0c;…

P4292-[WC2010]重建计划【长链剖分,线段树,0/1分数规划】

正题 题目链接:https://www.luogu.com.cn/problem/P4292 题目大意 给出nnn个点的一棵树&#xff0c;然后求长度在[L,U][L,U][L,U]之间的一条路径的平均权值最大。 解题思路 先上二分0/10/10/1分数规划&#xff0c;然后变成求最长在[L,U][L,U][L,U]之间的路径。 很经典的点分…