相遇(容斥+最短路+分类,水紫)

news/2024/11/15 21:38:21/文章来源:https://www.cnblogs.com/didiao233/p/18378318
第5题     相遇 查看测评数据信息

给定一个有n个节点m条边的无向图,在某一时刻节点st上有一个动点a, 节点end上有一个动点b, 动点a向节点end方向移动,要求是尽快到达end点,与此同时,动点b向节点st方向移动,要求是尽快到达st点, 但是整个过程中a和b不能相遇,问两点不相遇一共有多少种方案。

不相遇是指在同一时刻两点都不在同一节点或同一边上。结果可能很大,对1e9+7取模

输入格式

 

第一行两个整数n和m

第二行两个整数st和end

接下来m行,每行三个整数u,v,t, 表示u和v有一条长为t的边

其中1<=n<=1e5, 1<=m<=2e5,1<=t<=1e9

数据不存在重边和自环

 

输出格式

 

一个整数

 

输入/输出例子1

输入:

4 4

1 3

1 2 1

2 3 1

3 4 1

4 1 1

 

输出:

2

 

样例解释

 

直接求不相遇比较难,用减法原理。

很容易想到,首先要搞一个最短路计数。

dis[i]:s->i最短路,cnt[i]:s->i的最短路路径数
dis2[i]:t->i最短路,cnt2[i]:t->i的最短路路径数

 

用全部方案-相遇方案,就是答案

全部方案:最短路径条数平方。也就是 cnt[t]*cnt[t](cnt2[s]*cnt2[s] 也行)

相遇是在节点上相遇或者边上相遇

分别算就好

 

判断能否在u节点相遇:

枚举每个点,看看能否在点上相遇

条件:看看dis[s->u]是否等于dis[t->u],且s-u + t-u 是最短路

贡献:(cnt[u]*cnt2[u])^2

计算如下:

假设s到u有3条路可以走,t到u也有3条路可以走

那么我们可以考虑让s走第1条,走到t可以分别走3条。

我们还可以考虑让s走第2条,走到t可以分别走3条。

我们还可以考虑让s走第3条,走到t可以分别走3条。

所以就是 cnt[u]*cnt2[u]

但是我们还可以反过来,从t走,走到s

那么我们可以考虑让t走第1条,走到s可以分别走3条。

我们还可以考虑让t走第2条,走到s可以分别走3条。

我们还可以考虑让t走第3条,走到s可以分别走3条。

所以就是 cnt[u]*cnt2[u]

那么答案就是这俩相乘。

 

 

 

边上相遇:

枚举每条边,是否会在那条边相遇。

条件:这条边在最短路上。  s-u+w+t-v 是最短路

还有两个条件:

 

 

 

贡献:(cnt[s-u]*cnt[t-v])^2

和计算点的贡献是一样的。

 

 

 

 

 

 

 

 

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

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

相关文章

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址:https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1)主机发现 # -sn 只做ping扫描,不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (VMware) Nmap scan report for 192.168.…

VS2022 Visual Studio Installer 一直卡在0%,或者下载速度慢的问题解决办法

vs2022 installer,安装失败的问题C:\Users\Administrator\AppData\Local\Temp到c盘查看日志,发现是下载一个叫 vs_installer.opc的东西失败了,直接复制日志里的https://aka.ms/vs/17/release/installer,下载,发现成功下载,然后放到installer安装器同级目录,重新打开setu…

[Java基础]虚拟线程

虚拟线程(Virtual Thread)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),由 JVM 调度。许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。 虚拟线程和平台线程有什么关系? 在引入虚拟线程之前,java.lang.Thread 包已经…

一台电脑配置两个Git账号(github和gitlab),不同仓库使用不同的git

我们工作时一般都是使用gitlab,工作电脑也一般配置的 git 是连接 gitlab 的,那么当我们如果想用同一个电脑实现不同仓库根据自己的需要到底是推送代码到github还是 gitlab,以及使用哪个账号,(比如如果想用工作电脑维护自己的 github 项目,但是怕后面被公司追究用工作电脑干…

DDD是软件工程的第一性原理?

本文书接上回《DDD建模后写代码的正确姿势》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。前提 本文需要以系列前文的逻辑链条和结论为前提,如果没有阅读过前文的,可以阅…

[TCP/IP]三次握手

三次握手TCP建立连接为什么需要三次握手 TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求! TCP可靠传输的精髓:TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号(Initial Sequence Nu…

预设型 DP

预设型 DP《美好的一天》--青春学概论 한 잔 술에 취해 잠긴 목엔 沉醉于一杯酒 갈라지는 목소린 다시 带着沙哑的嗓音 두 잔 자기 전엔 기분 좋음 入睡前饮下第二杯让心情愉悦 알 수 없는 세상에 빠져 陷入不可预知的世界 세 잔 또 네 잔 술에 빠진 又沉醉于第三杯第四杯 세상…

Nginx缓存服务

Nginx缓存服务 7.1 缓存配置语法 proxy_cache 配置语法 S yntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, location//缓存路径 Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time…

第八周进度报告

常用API SimpleDateFormat格式化:把时间变成我们喜欢的格式 解析:把字符串表示的时间变成Date对象import java.text.SimpleDateFormat; import java.util.Date;public static void main(String[] args) throws ParseException {/*public SimpleDateFormat() //默认格式publi…

学习Java的第八周

随着24年暑假的结束,第八周的Java学习也结束了,本周主要学习了字符串,包括API简介(提供各种功能的可以直接使用的类),字符串的概述、构造实现(创建String对象的两种方式,它们的不同点)、内存分析(两种定义方式各自的内存原理)、字符串比较方法(equals和equalsIgnor…

XGBoost中正则化的9个超参数

正则化是一种强大的技术,通过防止过拟合来提高模型性能。本文将探索各种XGBoost中的正则化方法及其优势。为什么正则化在XGBoost中很重要? XGBoost是一种以其在各种机器学习任务中的效率和性能而闻名的强大算法。像任何其他复杂模型一样,它可能会过拟合,特别是在处理噪声数据或…