首页 > 其他分享 >相遇(容斥+最短路+分类,水紫)

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

时间:2024-08-24 21:48:16浏览次数:7  
标签:cnt 短路 容斥 相遇 水紫 可以 节点 cnt2

第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

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

 

 

 

 

 

 

 

 

标签:cnt,短路,容斥,相遇,水紫,可以,节点,cnt2
From: https://www.cnblogs.com/didiao233/p/18378318

相关文章

  • 【2】容斥与二项式反演
    【2】容斥与二项式反演1.1容斥原理容斥原理基于的是下面的恒等式:\[\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^i=0^n=[n=0]\]这个式子有什么意义呢?我们考虑一个长度为\(N\)的序列,并且要求其中每个元素都满足某个限制,计算满足这个条件的序列数量。每个元素都满足限制\(\Leftri......
  • 回顾图存储与最短路算法
    图的存储与最短路问题一、图的储存1.邻接矩阵邻接矩阵使用二维vecto......
  • 9. 容斥与反演
    9.容斥与反演容斥原理:\[|\bigcup_{i=1}^nP_i|=\sum_{S\subseteqU}(-1)^{|S|-1}|\bigcap_{s\inS}P_s|\]感性理解:\(P_i\):”满足某种性质的元素的集合“;左边:具有任意一种性质的元素的并,右边:至少具备多个性质的元素。证明:考虑一个元素\(x\),设其包含在\(k\)个集合内,那么当......
  • 最短路
    这是仙人掌的模板题,仙人掌不能有自环,但是可以有重边。多颗仙人掌组成的图叫做沙漠。将仙人掌的每个环缩成一个点之后,就会形成树仙人掌转树要利用圆方树:①.任选一个点为根②.此时每个环有且仅有唯一一个点到根的距离最近。然后将环中的点分类,离根节点最近的点叫“头”,剩余的点作......
  • 最短路 - Dijkstra 算法
    Dijkstra(迪杰斯特拉)算法是基于贪心思想的单源最短路算法暴力Dijkstra具体如下:structnode{ intv,w;};vector<node>e[N];intdist[N],vis[N];e[u]存的是节点u的所有出边的终点和边权,dist[u]存u到原点s的最小距离,vis[u]标记是否走过voiddijkstra(int......
  • 《数据结构》最短路径Dijkstra算法
                                    最短路径Dijkstra算法分析生长点ABCDEFP(A)=FAD(A)=130P(B)=FBD(B)=24P(C)=FCD(C)=10P(D)=——D(D)=无穷P(E)=——D(E)=无穷CP(A)=FAD(A......
  • 最短路算法
    1.Dijkstra算法算法思想:\(dijkstra\)算法采用的是贪心的思想。(1)定义一个\(dis\)数组,\(dis[i]\)表示i点到源点的最短路径,设源点的\(dis\)值为0,其他\(dis\)值为\(∞\)。(2)选出其中的最小\(dis\)值,进行标记并更新它相邻的\(dis\)值。(3)不断循环操作(2)。优点:dijkstra算......
  • Java中的图算法:如何实现高效的最短路径计算
    Java中的图算法:如何实现高效的最短路径计算大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!作为开头。最短路径算法是图论中的一个核心问题,广泛应用于网络路由、地图导航等领域。在Java中实现高效的最短路径计算通常涉及到Dijkstra算法和Floy......
  • 容斥原理
    二项式系数  二项式定理证明过程 (x+y)^n=(x+y)(x+y)(x+y)........(x+y)我们先展开式子,得出以上等式。为了方便,我们以n=3举例(x+y)^3=(x+y)(x+y)(x+y)对于每一个因式(即每一个(x+y)),都可以选择x或者y和其他的因式(即其他的(x+y))也选出x或者y相乘,然......
  • 最短路(DJsktra,spfa,flyd).md
    最短路弗洛伊德:全源最短路:\[\LargeDP方程:\\dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j])\]#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#defineintlonglong#defineiosstd::ios::sync_with_stdio(false);s......