题目链接


题目大意:

给出由 nnn 个点构成的无向图,再给出 qqq 个三元对 (u,v,l)( u , v , l )(u,v,l),现在问有多少条边 (i,j)( i , j )(i,j) 可以和至少一个三元对匹配,可以匹配的条件是:

从点 uuu 到点 vvv 且包含边 (i,j)( i , j )(i,j) 的最短路的长度需要小于等于 lll


解题思路:

注意这里path指的是路径,你可以重复经过某些点
对于一条边我们看看它是否成立我们是这样看的就是

dist[i][j]dist[i][j]dist[i][j]为i到j之间的最短路
w[i][j]w[i][j]w[i][j]为i到j之间的边权
那么如果(i,j)(i,j)(i,j)这条边满足那么就存在一个(u,v,l)(u,v,l)(u,v,l)使得满足dist[u][i]+w[i][[j]+dist[j][v]≤ldist[u][i]+w[i][[j] + dist[j][v]\leq ldist[u][i]+w[i][[j]+dist[j][v]≤l
但这个循环枚举是O(n4)O(n^4)O(n4)的考虑优化
对这个不等式移项
dist[u][i]+w[i][[j]≤l(u,v)−dist[j][v]dist[u][i]+w[i][[j] \leq l_{(u,v)}-dist[j][v]dist[u][i]+w[i][[j]≤l(u,v)​−dist[j][v]

我们看到左右两边都是333个变量。
那么我们可以枚举i,j,ui,j,ui,j,u,那么就是求一个vvv使得右边大过左边这个定值
那么对于右边我们可以先预处理出来,我们枚举u,ju,ju,j去找到最大值就好了!!


AC code

#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x) {x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {read(first);read(args...);
}int n, q, m;
ll dist[605][605];
ll G[605][605];
ll maxld[605][605];
ll mp[605][605];
int main() {IOS;ms(dist,LLF);cin >> n >> m;for(int i = 1; i <= m; ++ i) {int u, v, w;cin >> u >> v >> w;dist[u][v] = dist[v][u] = w;mp[u][v] = mp[v][u] = w;}for(int k = 1; k <= n; ++ k)for(int i = 1; i <= n; ++ i)for(int j = 1; j <= n; ++ j) if(i == j) dist[i][j] = 0;else dist[i][j] = min(dist[i][k]+dist[k][j],dist[i][j]);// for(int i = 1; i <= n; ++ i)//   for(int j = 1; j <= n; ++ j)// cout << dist[i][j] << " \n"[j == n];cin >> q;while(q --) {int u, v, l;cin >> u >> v >> l;G[u][v] = G[v][u] = l;}for(int i = 1; i <= n; ++ i) // 枚举ufor(int j = 1; j <= n; ++ j) { // 枚举jmaxld[i][j] = 0;for(int k = 1; k <= n; ++ k) { //枚举vif(k == i) continue;maxld[i][j] = max(G[k][i]-dist[k][j],maxld[i][j]);}}int ans = 0;for(int i = 1; i <= n; ++ i) { for(int j = i+1; j <= n; ++ j) {if(!mp[i][j]) continue;bool flag = 0;for(int k = 1; k <= n; ++ k) {if(dist[k][j]+mp[i][j]<=maxld[k][i])flag = 1;if(flag) break;}ans += flag;}}cout << ans;return 0;
}

图论 ---- F. Useful Edges(不等式移项优化预处理 + 路径和简单路径的区别 + 最短路)相关推荐

  1. 多目标优化(一)简单的 NSGA-Ⅱ

    多目标优化(一)简单的 NSGA-Ⅱ 写在前面: 1.接触到的第一个多目标优化算法,对于2~3个目标真挺有效的: 2.本文主要介绍自己理解的 NSGA-II Matlab 程序实现,在学习中迷糊的地方 ...

  2. 做过SEO优化的网站与普通站的区别在哪里

    一个网站有没有进行过搜索引擎优化,打开网站一看便知.例如,通过看网站首页.网站的导航.图片的alt标签描写等内容,可以发现两者之间的区别.与没有进行优化的普通网站相比,做过SEO优化的网站的优越性主要 ...

  3. 优化汽车零部件循环取货路径的遗传算法模型

    优化汽车零部件循环取货路径的遗传算法模型 随着工业化程度的提高,汽车行业的发展也越来越快速.汽车零部件加工作为汽车行业中的重要环节,为汽车整体质量和性能提供了坚实的保障.而在汽车零部件加工过程中,循环 ...

  4. 【路径规划】基于蜣螂优化算法的三维无人机路径规划(山区地形)【Matlab代码#12】

    文章目录 [可更换其他算法,`获取资源`请见文章第5节:资源获取] 1. 蜣螂优化算法DBO 2. 无人机路径规划 3. 部分代码展示 4. 效果图展示 5. 资源获取 [可更换其他算法,获取资源请见 ...

  5. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)

    题目链接 题目大意: q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],m ...

  6. 2021年中国研究生数学建模竞赛F题——航空公司机组优化排班问题

    一.背景介绍 众所周知,一趟民航航班必须在满足特定的条件下才能起飞,这些条件包括国家法律法规,国际公约,政府的行政条例,和公司自身的政策利益,一些国家的工会组织还会对机组人员的福利偏好有规章约束.所有 ...

  7. 图论 ---- F. The Shortest Statement (最短路的性质 + 任意两点间最短路 + 图转树)

    题目链接 题目大意: 给你一个nnn个点mmm条边的无向图,就是动态询问任意两点间的最短路 n,m∈[1,1e5],m−n≤20n,m\in[1,1e5],m-n\leq20n,m∈[1,1e5],m ...

  8. 2021华为杯建模F题航空公司机组优化排班问题思路分析

    航空公司机组优化排班问题 本赛题由三个子问题组成,每个子问题都基于前一个子问题并与之相容.如果概念定义和过程描述与业界有所出入,皆以本赛题为准.凡是本赛题没有提及,均不在考虑之列.本题假定: 机组人员 ...

  9. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路

    基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...

最新文章

  1. 漫画算法:什么是一致性哈希?
  2. [CF1076E]Vasya and a Tree
  3. Hadoop常见错误解析
  4. 可以输入值的下拉框(select和input的组合使用)
  5. power bi 中计算_Power BI中的期间比较
  6. 小c下载样式插件Xiaocstyle适用于emlog系统
  7. java导入excel数据到mysql_java的poi技术读取Excel数据到MySQL
  8. angelajs中ajax,Fabric.js Triangle angle属性用法及代码示例
  9. 苹果mac3D模型渲染软件:KeyShot
  10. 精进 Quartz—Quartz大致介绍(一)
  11. 时间序列分析-ARMA模型
  12. python 贝塞尔曲线对图像进行扭曲_Python3 OpenCV3图像处理-图像扭曲
  13. 2022-2028年中国工业互联网预测性维护(PdM)行业市场调查及未来前景预测报告
  14. 约束(Constraint)SQL约束有哪几种?【常用的约束】【有例子】【非空约束】【唯一约束】【主键约束】【外键约束】【检查约束】
  15. 魅族mx6 原生android,手机 篇一:魅族16s真实使用感受漫谈
  16. python爬虫selenium和bs4_python爬虫――selenium+bs4爬取选股宝‘利好‘or’利空'股票信息...
  17. OpenMV学习(0):环境搭配
  18. Gartner发布首份中国RPA魔力象限报告,弘玑Cyclone被重点推荐
  19. 正睿多校联盟训练Week6
  20. 来自GitHub的系列渗透测试工具

热门文章

  1. python列表用法详解(查找、添加、删除、修改、复制、循环遍历、列表嵌套)
  2. ida pro学习笔记2022.3.19
  3. python网络爬虫信息组织与提取
  4. 干货|理解attention机制本质及self-attention
  5. 经验 | OpenCV图像旋转的原理与技巧
  6. 【OpenCV 4开发详解】图像连接
  7. 第二十篇:Summarisation摘要
  8. 第十四篇:有概率的上下文无关语法Probabilistic Context-Free Grammar
  9. Python01——初识python
  10. 阿里巴巴首部记录片问世:看哭所有创业者!