[最短路图][DP] ARC090 E - Avoiding Collision

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大 阅读详情

SolutionSolution

刚开始读错题+1
首先转化为总方案数减去不合法的方案数。
先建出最短路图。DP出从S,TS,T到每个点的方案数fu,gufu,gu。
考虑在边上还是点上相遇。
点上的话就考虑disT=2disudisT=2disu的点,贡献是f2ug2ufu2gu2。
边上的点考虑一条边两边的点(u,v)(u,v),2disu<disT∧2disv>disT2disu<disT∧2disv>disT的点,贡献就是f2ug2vfu2gv2。
就好啦~

#include <bits/stdc++.h>
#define show(x) cerr << #x << " = " << x << endl
using namespace std;

typedef long long ll;
typedef pair<int, int> pairs;
const ll INF = 1ll << 60;
const int N = 404040;
const int MOD = 1000000007;

inline char get(void) {
    static char buf[100000], *S = buf, *T = buf;
    if (S == T) {
        T = (S = buf) + fread(buf, 1, 100000, stdin);
        if (S == T) return EOF;
    }
    return *S++;
}
template<typename T>
inline void read(T &x) {
    static char c; x = 0; int sgn = 0;
    for (c = get(); c < '0' || c > '9'; c = get()) if (c == '-') sgn = 1;
    for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';
    if (sgn) x = -x;
}

struct edge {
    int to, key, next;
    edge(int t = 0, int k = 0, int n = 0): to(t), key(k), next(n) {};
} G[N];
int n, m, x, y, z, s, t, gcnt, ans;
ll dis[N], sid[N];
int head[N], vis[N], onw[N];
queue<int> Q;
vector<int> E[N], B[N];
int f[N], g[N];

inline void addEdge(int from, int to, int key) {
    G[++gcnt] = edge(to, key, head[from]); head[from] = gcnt;
    G[++gcnt] = edge(from, key, head[to]); head[to] = gcnt;
}
inline void shortestPath(ll *dis, int s) {
    for (int i = 1; i <= n; i++) {
        dis[i] = INF; vis[i] = 0;
    }
    Q.push(s); vis[s] = 1; dis[s] = 0;
    while (!Q.empty()) {
        int x = Q.front(); Q.pop();
        for (int i = head[x]; i; i = G[i].next)
            if (dis[G[i].to] > dis[x] + G[i].key) {
                dis[G[i].to] = dis[x] + G[i].key;
                if (!vis[G[i].to]) {
                    vis[G[i].to] = 1;   Q.push(G[i].to);
                }
            }
        vis[x] = 0;
    }
}
inline void add(int &x, int a) {
    x = (x + a >= MOD) ? x + a - MOD : x + a;
}
inline void sub(int &x, int a) {
    x = (x < a) ? x - a + MOD : x - a;
}
inline void dfs1(int u) {
    vis[u] = 1;
    for (int to: E[u]) {
        if (!vis[to]) dfs1(to);
        add(f[u], f[to]);
    }
}
inline void dfs2(int u) {
    vis[u] = 1;
    for (int to: B[u]) {
        if (!vis[to]) dfs2(to);
        add(g[u], g[to]);
    }
}
inline int sqr(int x) {
    return (ll)x * x % MOD;
}

int main(void) {
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    read(n); read(m);
    read(s); read(t);
    for (int i = 1; i <= m; i++) {
        read(x); read(y); read(z);
        addEdge(x, y, z);
    }
    shortestPath(dis, s);
    shortestPath(sid, t);
    for (int i = 1; i <= n; i++)
        onw[i] = (dis[i] + sid[i] == dis[t]);
    for (int i = 1; i <= n; i++)
        if (onw[i])
            for (int j = head[i]; j; j = G[j].next)
                if (onw[G[j].to] && dis[G[j].to] == dis[i] + G[j].key)
                    E[i].push_back(G[j].to);
    for (int i = 1; i <= n; i++)
        if (onw[i])
            for (int j = head[i]; j; j = G[j].next)
                if (onw[G[j].to] && sid[G[j].to] == sid[i] + G[j].key)
                    B[i].push_back(G[j].to);

    for (int i = 1; i <= n; i++) vis[i] = 0;
    vis[t] = 1; f[t] = 1; dfs1(s);
    for (int i = 1; i <= n; i++) vis[i] = 0;
    vis[s] = 1; g[s] = 1; dfs2(t);
    for (int i = 1; i <= n; i++)
        if (onw[i] && dis[i] * 2 == dis[t])
            add(ans, sqr((ll)f[i] * g[i] % MOD));
    for (int i = 1; i <= n; i++)
        if (onw[i] && dis[i] * 2 < dis[t])
            for (int j: E[i])
                if (dis[j] * 2 > dis[t])
                    add(ans, (ll)g[i] * f[j] % MOD * g[i] % MOD * f[j] % MOD);
    ans = (sqr(f[s]) - ans + MOD) % MOD;
    cout << ans << endl;
    return 0;
}
利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南 在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。 阅读详情

相关推荐

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9947

最短路图(dijkistra)

给定一张有向图,起点s,终点t 求s到t的所有最短路组成的DAG(没有负环的最短路图一定是DAG) 之前蒟蒻的我使用前缀指针然后dfs。。。。其实有更为简洁巧妙地方法 首先需要建一张正向图(这不是废话吗),然后还需要建一张反向图 dis1[] 表示正向图上点s到所有点的最短距离,dis2[]表示反向图上点t到所有点的最短距离 考虑正向图上的一条边(edge){u,v,w} 如何判断这条...

qq_34991215的博客 1360

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 493

图论4-最短路(I)

三种最短路算法 Floyd 可求出任意两点间最短路,适合小规模稠密图(点数不超过500500500)。 复杂度O(n3)O(n^3)O(n3) 注意:如果nnn超过800800800,且图比较稀疏,可使用nnn次dijkstra代替Floyd。 for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dis[i][j]=min(dis[i][j],dis[i][k]+

周世正的博客 424

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1153

Unity中USD场景导入与工业级协作实战指南

USD(Universal Scene Description)是一种面向复杂三维场景的结构化数据模型,其核心在于分层描述、变体管理与非破坏性组合,本质是支持多团队并行协作的场景协议。它不同于传统模型格式,强调运行时可编辑性与版本可控性,技术价值体现在跨软件资产一致性、零拷贝动态叠加及内存中实时合成。典型应用场景包括建筑BIM实时漫游、汽车多配置仿真、影视级灯光材质协同等工业管线。在Unity中,USD已深度集成于URP/HDRP管线,通过原生USD Importer、Runtime与Exporter三组件

weixin_32073537的博客 301

最短路之Dijkstra(15张图解)

Dijstra算法详解

IT OR 考公? 1万+

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5457

【图论】初识最短路

图论,最短路的写法

Changersh 536

基于cat12搞定SBM的ROI的统计分析——vertex水平和ROI水平的双样本T检验

前言 一、Atlas皮层图谱介绍 二、SBM分析——主要以皮层四种常用指标中的厚度(thickness)和沟深(depth)为主

Sophia2023的博客 8749

Vue3 - 完美解决高德地图定位失败 Get ipLocation failed.Geolocation permission denied.(获取ipLocation失败。地理定位权限被拒绝。)

Get ipLocation failed.Geolocation permission denied.,vue3引入高德地图当前定位失败 ,vue3中使用高德地图定位报错,高德地图API用户定位失败,高德地图H5 定位失败报错排查和解决方案,微信公众号H5网页高德地图定位报错,谷歌浏览器-高德地图定位失败geolocation,getCurrentPosition 返回的 message报错,如何解决此问题,uniapp h5高德地图,微信、QQ等内置浏览器定位失败,高德地图实现实时用户位置定位,引入高德

🏆 前端领域优质创作者 4169

arc090E Avoiding Collision 最短路计数

Description 给一张无向带权图,求有多少对最短路点不相交、边不相交 Solution 如果没有限制就是最短路计数,考虑减去不合法的路径对 我们可以枚举香蕉的点,这个点x只有当dis[st][x]*2=dis[x][ed]*2=dis[st][ed]时我们才算它 同样可以枚举香蕉的边,这条边w只有当dis[st][x]*2&lt;dis[st][ed]且dis[y][ed]*2&lt;...

olahiuj的博客 371

【信息系统项目管理师】第1章:信息化发展 考点梳理

本文主要详细梳理高项:信息化、新型基础设施建设、两化融合、数字中国、数字化转型与元宇宙等内容。

数据知道的博客 8569

DP与最短路联系 && 最优贸易 —— DP + 最短路

DP与最短路联系 以0−10-10−1背包为例 转移方程为 f(i,j)=max(f(i-1,j),f(i-1,j-w)+v) 可以看成图论中的路径; 有以下关系; 这启发我们,如果一个DP问题的依赖关系不具有拓扑序,那么我们可以用最短路算法来解决这种DP不能解决的问题; 比如说像下图这种形成了环路的,用DPDPDP是没法解决的; 但是我们可以用最短路来解决; 题面 传送门 思路 要求一次买入卖出可以得到的最大收益; 我们设定集合为先买后卖的所有方案中的最大值; 将上述集合划分成若干个子集;

weixin_45724872的博客 1015

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【最短路+容斥】arc090E Avoiding Collision

题目:https://vjudge.net/contest/464115#problem/G 题意: 一个nnn个点mmm条边的无向图,每条边有一个边权www。有一个起点sss和终点ttt,求从sss出发到ttt和从ttt出发到sss的不相遇的两条路径的路径对数。 思路: dijkstradijkstradijkstra 求出起点到iii的距离dis[0][i]dis[0][i]dis[0][i],终点到iii的距离dp[1][i]dp[1][i]dp[1][i],起点到iii最短路的方案数cnt[0][i

qq_45599865的博客 322

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

图论(四)—最短路问题(Dijkstra)

概念:从某个点 A 到另一个点B的最短距离(或路径)。从点 A 到 B 可能有多条路线,多种距离,求其中最短的距离和相应路径。

Zhang_Qin123的博客 2487

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ARC 084(Small Multiple-最短路)

给k≤100000k\le 100000,求k的倍数(必须是正数)中数位和的最小值。 考虑在某一位填1相当于对这个数modk的值贡献了viv_i,我们可以处理出所有的viv_i. 注意填2贡献了2vi2v_i,可以视为填了2个viv_i,而且10imodk10^i mod k是循环的。所以可以填无穷次viv_i. 问题变成了填多少次viv_i可以达到k的倍数。 最短路。 注意BFS超时,对m

nike0good |Oier&ACMer | 熟能生巧 636

图论——最短路

最短路

m0_64378422的博客 805

ARC 083D. 500 Restoring Road Network 最短路

题意:n个点的无向图, 告诉你矩阵a[i][j]:i-&gt;j的最短路径长度.1&lt;=n&lt;=300,问矩阵a是否合法.若a合法输出最小的边集之和.若存在a[i][j]&gt; a[i][k]+a[k][j] 则说明矛盾输出非法.a[i][j]如果存在一个中间点k 满足a[i][k]+a[k][j] = a[i][j] 那么(i,j)之间可以不用添加边.若不存在中间点k 为了使(i,j)...

noone0的博客 343

【图论】最短路问题

单源最短路问题是指固定一个起点,求它到其他任意一点的最短路问题。

Aafarmi的博客 980

图论之分层图最短路总结 与经典例题

一、分层图 分层图只是建图时有区别,但跑最短路板子都是一样的,正所谓图论最难的就是建图,只要有合适的建图方法,那么问题就很简单了。 分层图是指有很多个平行的图,各个平行的图之间有特殊的连接边。 用分层图的几种情况:1、有k个不同集合的边,将每个集合内的边建成一张图,再建立第k+1个图,是一个虚层,用这个虚层将这k张图连接起来。每次可以通过虚层转移到另一个集合的图中。如例1.小雨坐地铁。2、有k个机会使得走当前此边不花费代价或花费特殊的代价,可以建立k张相同的该图,每张图之间用有边的点连接起来,其代价是0或是

harry12138小白的博客 7962

图论学习-最短路模型

这里只是我对于最短路模型学习的一个记录,不正确的地方希望大家指出。 文章目录最短路模型一、 什么是最短路?1.1 概念1.2 基本术语二、主要模型2.1 dijkstra2.1.1 步骤2.1.2 画图理解2.1.3 为什么dijkstra不能处理负权边?2.2 堆优化的dijkstra2.3 bellman_ford2.3.1 三角形不等式2.3.2 步骤2.3.3 代码实现2.4 spfa2.4.1 步骤2.4.2 代码实现2.4.3 主要问题2.5 floyd三、练习题目四、参考 最短路模型 一、 什

麒麟001号的博客 3015

【算法基础】 Acwing 图论 之 最短路 (Dijkstra|Bellman_ford|Spfa|Floyd))

算法基础笔记

Remember who you are! 1792

【AtCoder】ARC090

C - Candies 前一枚举一个i,求第一行的前i个和第二行从第n个到第i个 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #...

weixin_30797027的博客 246

基于DP的最短路算法---Floyd

简介: Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 特点: 1.可以求任意两个结点之间的最短路的 2.复杂度比较高,但是常数小,容易实现(三重循环) 3.适用于任何图,包括有向图,无向图,边权正负均可(不存在负环) 核心思想: 我们枚举三个点 i , j , k; 对于两个点(i , j) , d[i , j] 表.

qq_47982709的博客 885

最短路图

最短路图 对于一些只能在最短路径上操作且可能同时存在多条最短路的问题时,我们可以采用建最短路图的方法:就是将在最短路径上的边放入一个新的图当中,使得问题可以在一个DAG(有向无环图)上操作。 具体实现方法:如果我们需要求从1到n的最短路图,可以先从节点1跑一遍单源最短路,再从n跑一遍单源最短路,(跑两遍最短路),然后枚举每个节点,如果从节点1到它的最短路加上从节点n到它的最短路等于从节点...

dbp123123的博客 711
上一篇: [后缀自动机][树上启发式合并] LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
下一篇: [DP][分治] 51Nod 1934 受限制的排列
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值