Destroying Roads
题目链接
分析
又是变形了的最短路
我们可以考虑哪些道路必须被保留
然后枚举两个起点到终点重复的道路
考虑公合法用这些道路就可以了
\(Code\)
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 3005;
int n , m , s1 , t1 , l1 , s2 , t2 , l2;
int tot , h[N] , dis[N][N] , vis[N];
struct edge{int to , nxt;}e[2 * N];
struct node{
int id , d;
bool operator < (node c) const {return d > c.d;}
};
priority_queue<node> Q;
inline void add(int x , int y){e[++tot] = edge{y , h[x]} , h[x] = tot;}
void dijkstra(int s)
{
while (!Q.empty()) Q.pop();
memset(vis , 0 , sizeof vis);
Q.push(node{s , dis[s][s] = 0});
while (!Q.empty())
{
node now = Q.top(); Q.pop();
int u = now.id;
if (vis[u]) continue;
vis[u] = 1;
for(register int i = h[u]; i; i = e[i].nxt)
{
int v = e[i].to;
if (dis[s][u] + 1 < dis[s][v])
{
dis[s][v] = dis[s][u] + 1;
Q.push(node{v , dis[s][v]});
}
}
}
}
int main()
{
scanf("%d%d" , &n , &m);
int x , y;
for(register int i = 1; i <= m; i++)
scanf("%d%d" , &x , &y) , add(x , y) , add(y , x);
scanf("%d%d%d%d%d%d" , &s1 , &t1 , &l1 , &s2 , &t2 , &l2);
memset(dis , 0x3f3f3f3f , sizeof dis);
for(register int i = 1; i <= n; i++) dijkstra(i);
if (dis[s1][t1] > l1 || dis[s2][t2] > l2)
{
printf("-1");
return 0;
}
int ans = dis[s1][t1] + dis[s2][t2];
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= n; j++)
{
x = dis[s1][i] + dis[i][j] + dis[j][t1];
y = dis[s2][i] + dis[i][j] + dis[j][t2];
if (x <= l1 && y <= l2)
ans = min(ans , x + y - dis[i][j]);
y = dis[t2][i] + dis[i][j] + dis[j][s2];
if (x <= l1 && y <= l2)
ans = min(ans , x + y - dis[i][j]);
}
printf("%d" , m - ans);
}
Destroying Roads的更多相关文章
- CF Destroying Roads (最短路)
Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces 543.B Destroying Roads
B. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #302 (Div. 1) B - Destroying Roads
B - Destroying Roads 思路:这么菜的题我居然想了40分钟... n^2枚举两个交汇点,点与点之间肯定都跑最短路,取最小值. #include<bits/stdc++.h> ...
- Codeforces Round #302 (Div. 2) D - Destroying Roads 图论,最短路
D - Destroying Roads Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544 ...
- [CF544] D. Destroying Roads
D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- B. Destroying Roads
Destroying Roads 题目链接 题意 n个点,m条边每两个点之间不会有两个相同的边,然后给你两个起s1,s2和终点t1,t2; 求删除最多的边后满足两个s1到t1距离\(<=l1\) ...
- Codeforces 543B Destroying Roads(最短路)
题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...
- Codeforces543 B. Destroying Roads
传送门:>Here< 题意:给出一张无向图(边权为1),并给出两对起点和终点以及距离:s1,t1,l1; s2,t2,l2; 要求删除尽量多的边,使得dis(s1,t1)<=l1, ...
- [CodeForces] 543B Destroying Roads
脑洞+暴力. 因为边权是1,所以bfs一下,O(n^2)求任意两点间最短路,再枚举. ans最大是\(dis_{s1,t1}+dis_{s2,t2}\) 再考虑有公共边的情况,一定存在两个点 u, v ...
随机推荐
- 关于解决scapy.error.Scapy_Exception: tcpdump is not available. Cannot use filter !报错
解决办法 sudo apt install tcpdump 后续 我特意没写到我的 arp 攻击那篇文章里面,就是为了水一片文章
- python算法初步(一)
python算法初步(一) 冒泡排序 时间效率O(n²)原理:依次比较相邻两个位置的元素大小,然后按照要求交换位置. #从中选出一个数据(作为最小数据),然后和其他的数据依次比较,如果有更小的数据,那 ...
- 最大值减去最小值小于或等于 num 的子数组数量问题
最大值减去最小值小于或等于 num 的子数组数量问题 作者:Grey 原文地址: 博客园:最大值减去最小值小于或等于 num 的子数组数量问题 CSDN:最大值减去最小值小于或等于 num 的子数组数 ...
- 看起来简单实际上却很牛的KMP算法:LeetCode572-另一棵树的子树
题目描述 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 暴力解法 从 ...
- kernel 启动流程
一.概述 之前学习了uboot的启动流程,现在接着学习uboot的启动流程,关于 kernel 的启动流程分析的大佬也是很多的,这里还是通过流程的图的方式进行记录,为了像我一样的新手,直观的了解 ke ...
- 【JVM】根节点枚举与安全点
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 转载请在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益.让我们一起维护 ...
- uni-app生命周期和路由跳转
生命周期分为:应用生命周期和页面生命周期 具体内容可参考:uni-app官网Api 应用生命周期(仅可在App.vue中监听) (1)onLaunch:当uni-app 初始化完成时触发(全局之触发一 ...
- 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了. Ruby是一门在面向对象层面无所不用其极的解释型编程语言. 我们可以把编写Ruby代码看作是一场行为 ...
- 【转载】WebBrowser控件的常用方法、属性和事件
1. 属性 属性 说明 Application 如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch).如果在宿主对象中自动化对象无效,这个程序将返回Web ...
- 利用Redisson实现订单关闭
实体类 为了方便测试,直接在测试类中的写内部类: @Data @AllArgsConstructor @NoArgsConstructor public class OrderInfo { /** * ...