[BZOJ2725/Violet 6]故乡的梦

Description
T3des(5).gif

Input
T3input(5).gif

Output
T3output(5).gif

Sample Input
6 7
1 2 1
2 3 1
3 4 2
4 5 1
5 6 1
1 3 3
4 6 3
1 6
4
1 2
1 3
4 3
6 5

Sample Output
7
6
Infinity
7

HINT
T3hint(5).gif


其实这题和[TJOI2012]桥基本差不多,如果不是最短路径上的边,那直接输出最短路即可。否则就按照[TJOI2012]桥那题来即可

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_set>
#define inf 0x7f7f7f7f7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())    x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10)  print(x/10);putchar(x%10+'0');
}
const int N=2e5,M=2e5;
int pre[(M<<1)+10],now[N+10],child[(M<<1)+10],val[(M<<1)+10];
int Fa[N+10],Lca[N+10],stack[N+10],dfn[N+10];
bool vis[N+10],flag[(M<<1)+10];
int n,m,tot,num,Max;
ll Dis,Ans[N+10];
struct MyHash{size_t operator ()(const pair<int,int> &x)const{return ((hash<int>()(x.first)<<1)^(hash<int>()(x.second)))>>1;}
};
unordered_set<pair<int,int>,MyHash>st;
struct S1{#define ls (p<<1)#define rs (p<<1|1)#define fa (p>>1)struct node{int x;ll v;bool operator <(const node &a)const{return v<a.v;}}Q[N+10];int tot;void insert(int x,ll v){Q[++tot]=(node){x,v};int p=tot;while (p!=1&&Q[p]<Q[fa])    swap(Q[p],Q[fa]),p=fa;}void Delete(){Q[1]=Q[tot--];int p=1,son;while (ls<=tot){if (rs>tot||Q[ls]<Q[rs])    son=ls;else    son=rs;if (Q[son]<Q[p])    swap(Q[p],Q[son]),p=son;else    break;}}
}Heap;
struct Segment{ll tree[(N<<2)+10];Segment(){memset(tree,127,sizeof(tree));}void Add_tag(int p,ll v){tree[p]=min(tree[p],v);}void pushdown(int p){if (tree[p]==inf)   return;Add_tag(ls,tree[p]);Add_tag(rs,tree[p]);}void Modify(int p,int l,int r,int x,int y,ll v){if (x<=l&&r<=y){Add_tag(p,v);return;}int mid=(l+r)>>1;if (x<=mid) Modify(ls,l,mid,x,y,v);if (y>mid)  Modify(rs,mid+1,r,x,y,v);}void traversals(int p,int l,int r){if (l==r){Ans[l]=tree[p];return;}pushdown(p);int mid=(l+r)>>1;traversals(ls,l,mid);traversals(rs,mid+1,r);}
}Tree;
struct S2{ll dis[N+10];S2(){memset(dis,63,sizeof(dis));}
}Frw,Bck;
void join(int x,int y,int z){pre[++tot]=now[x],now[x]=tot,child[tot]=y,val[tot]=z;}
void insert(int x,int y,int z){join(x,y,z),join(y,x,z);}
void dijkstra(int x,ll *dis){memset(vis,0,sizeof(vis));Heap.insert(x,dis[x]=0);while (Heap.tot){int Now=Heap.Q[1].x;Heap.Delete();if (vis[Now])   continue;vis[Now]=1;for (int p=now[Now],son=child[p];p;p=pre[p],son=child[p]){if (dis[son]>dis[Now]+val[p]){dis[son]=dis[Now]+val[p];Heap.insert(son,dis[son]);}}}
}
void put_flag(int x){for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]){if (Frw.dis[x]+val[p]+Bck.dis[son]==Dis){st.insert(make_pair(x,son));st.insert(make_pair(son,x));flag[p]=flag[p+(p&1?1:-1)]=1;put_flag(son);return;}}
}
void Find_fa(int x){for (int p=now[x],son=child[p];p;p=pre[p],son=child[p])if (Frw.dis[x]+val[p]==Frw.dis[son]&&!Fa[son])  Fa[son]=x,Find_fa(son);
}
void Fill(int x,int v){if (Lca[x]) return;Lca[x]=v;for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]) if (Fa[son]==x) Fill(son,v);
}
void Get_Lca(int x){int top=0;while (x){Fill(x,x);stack[++top]=x;x=Fa[x];}for (int i=top;i;i--)   dfn[stack[i]]=num++;num--;
}
int main(){int n=read(),m=read();for (int i=1;i<=m;i++){int x=read(),y=read(),z=read();insert(x,y,z);}int S=read(),T=read();dijkstra(S,Frw.dis);dijkstra(T,Bck.dis);Dis=Frw.dis[T];put_flag(S);Find_fa(S);Get_Lca(T);for (int i=1;i<=tot;i+=2){if (flag[i])    continue;int x=child[i],y=child[i+1],v=val[i];if (Lca[x]==Lca[y]) continue;if (dfn[Lca[x]]>dfn[Lca[y]])    swap(x,y);ll tmp=Frw.dis[x]+v+Bck.dis[y];Tree.Modify(1,1,num,dfn[Lca[x]]+1,dfn[Lca[y]],tmp);}Tree.traversals(1,1,num);int Q=read();for (int i=1;i<=Q;i++){int x=read(),y=read();if (!st.count(make_pair(x,y))){printf("%lld\n",Dis);continue;}printf(Ans[max(dfn[x],dfn[y])]==inf?"Infinity\n":"%lld\n",Ans[max(dfn[x],dfn[y])]);}return 0;
}

转载于:https://www.cnblogs.com/Wolfycz/p/9745712.html

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

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

相关文章

智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯

目录智能家居工厂模式整体设计框架继电器控制灯代码contrlEquipments.h 文件&#xff08;设备类&#xff09;mainPro.c 文件&#xff08;主函数&#xff09;bathroomLight.c 文件&#xff08;浴室灯&#xff09;secondfloorLight.c 文件&#xff08;二楼灯&#xff09;livingro…

读《系统虚拟化-原理与实现》-第二章

x86构架及操作系统概述 x86内存构架 地址空间和地址 物理地址空间&#xff1a;内存和其他硬件资源组合到一起&#xff0c;分布在CPU的物理地址空间内&#xff0c;CPU使用物理地址索引这些资源 线性地址空间&#xff1a;一个平台只有一个物理地址空间&#xff0c;但每个程序都…

智能家居 (4) ——工厂模式火焰报警

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

智能家居 (5) —— LD3320语音模块二次开发

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

linux命令整理

1. mkdir ##创建目录 命令 【参数】 路径文件 参数&#xff1a; mkdir -p ##递归创建 mkdir -v ##显示创建目录的过程 示例&#xff1a; [rootXM ~]# mkdir /data [rootXM ~]# mkdir -pv test/{1..3}/{4..6} ##同时创建多个目录及子目录 mkdir: created di…

eclipse搭建SSH框架详解

2019独角兽企业重金招聘Python工程师标准>>> SSH框架是最常用的框架之一&#xff0c;在搭建SSH框架的时候总有人遇到这样&#xff0c;那样的问题。下面我介绍一下SSH框架搭建的全过程。 第一步&#xff1a;准备工作。 下载好eclipse,Struts2,Spring,Hibernate。…

龙芯派启用串口3-5

硬件平台&#xff1a;龙芯派二代 内核版本&#xff1a;linux-3.10 这几天在龙芯派上加了一个无线串口&#xff0c;决定采用串口3来连接串口&#xff0c;在龙芯派上执行 #ls /dev/ttyS* 发现只有ttyS0&#xff0c;查看设备树后发现其他串口的设备树节点都是有的&#xff0c…

智能家居 (7) ——网络服务器线程控制

目录网络线程控制代码inputCommand.hmainPro.csocketControl.c代码测试往期文章网络线程控制代码 inputCommand.h #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wiringPi.h> #include <wiringSerial.h> #include &l…

龙芯3A4000 VNC配置

安装 yum install tigervnc-server -y 拷贝配置文件 cp /lib/systemd/system/vncserver\.service /lib/systemd/system/vncserver:1.service修改配置文件 vim /lib/systemd/system/vncserver:1.service替换< USER>为用户名 配置、启动vnc systemctl enable vncs…

智能家居 (6) ——语音识别线程控制

目录语音识别线程控制代码inputCommand.hmainPro.cvoiceControl.c代码测试往期文章语音识别线程控制代码 inputCommand.h #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wiringPi.h> #include <wiringSerial.h>struc…

MIPS结构体传参

本文讲解了C语言运行在MIPS体系中结构体传参的情况 硬件平台&#xff1a;Loongson 3A3000 系统&#xff1a;uos 在《see MIPS run》中11.2.5中描述到&#xff0c;会将结构体成员压缩到各个arg寄存器中进行传递 “we have to pack the register with data to mimic the arran…

对象创建过程之二(类加载器)

2019独角兽企业重金招聘Python工程师标准>>> JAVA为我们提供了两种动态加载机制。 第一种是隐式机制。其实new一个对象和调用类的静态方法时&#xff0c;就是隐式机制在工作。 第二种是显示机制。显示的机制又有两种策略 第一种是用public static Class<?> …

Python_堆栈和队列

堆栈和队列 (1)堆栈&#xff0c;新放进去的先取出 #encodingutf-8 >>> stack [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> print (stack) [3, 4, 5, 6, 7] >>> print (stack.pop()) 7 >>> print (stack) […

智能家居 (10) ——人脸识别祥云平台编程使用(编译libcurl库支持SSL,安装SSL依赖库libssl、libcrypto)

目录说明人工智能OCR识别平台介绍人脸识别接口购买编程打通OCR后台实现人脸识别&#xff08;ubuntu上实现&#xff09;问题发现编译libcurl库支持SSL安装SSL依赖库openSSL(使用工具wget)curl库重新配置&#xff0c;编译&#xff0c;安装开启SSL后重新编译人脸识别.C文件传入图片…

srs 服务关闭命令_【经验总结】如何做到网络版工作站与服务器时间同步?

随着行业发展&#xff0c;越来越多的实验室色谱数据工作站由原来的单机版&#xff0c;升级为网络版。升级后带来的益不必多说&#xff0c;那么升级带来的困难你遇到过吗&#xff1f;快来跟小析姐一起看看牛人是如何解决问题的吧。最近公司将色谱工作站进行了升级&#xff0c;采…

oss图片尺寸调用方式_是时候来一场轰轰烈烈的OSS升级了

【摘要】伴随5G和云网部署的持续推进&#xff0c;运营商OSS升级建设都已经在不断加速。| 科 | 技 | 杂 | 谈 |中国通信行业第一自媒体【1】运营商的IT支撑系统&#xff0c;正迫切需要新一轮的调整转型。今天&#xff0c;中国移动在2020全球合作伙伴大会上宣布&#xff0c;全球最…

由C过渡到C++-入门知识点

从C语言过渡到C&#xff0c;这些知识点应该是比较重要的。 目录 第一个C程序名称空间特性coutcin 缺省参数重载提问&#xff1a;为什么C语言不支持重载而C支持 引用常引用 引用与函数返回值对于指针和引用的区别引用的底层实现两者在语法上两者在物理上两者的不同之处 内联函数…

gdb pwndbg插件安装

环境&#xff1a; gdb 9.2ubuntu 20(x64) 连接 pwndbggdb9.2gdb9.2网盘连接 密码: kaq4GDB中文教程 编译gdb 由于发行的gdb比较老&#xff0c;pwndbg建议使用高版本GDB&#xff0c;因此我们下载最新的GDB9.2 安装依赖 #apt install texinfo解压GDB,卸载自带GDB #tar -vxf…

Android--UI之DatePicker、TimePicker...

前言 这一篇博客分别讲解Android平台下&#xff0c;关于日期和时间的几个相关控件。包括DatePicker&#xff08;日期选择控件&#xff09;、TimePicker&#xff08;时间选择控件&#xff09;、DatePickerDialog&#xff08;日期选择对话框&#xff09;、TimePickerDialog&#…

递归和迭代路由_静态路由在以太网接口中的不同书写会导致路由器怎样的操作结果?...

各位小伙伴们&#xff1a;大家好&#xff01;上一节和大家分享了在不同类型的网络中应该使用什么样的静态路由配置命令&#xff1b;今天我们再来看看在常见的多路访问(MBA)网络——以太网中&#xff0c;静态路由的不同书写方式将导致路由器执行那些不同的操作。如下图&#xff…