P5683 [CSP-J2019 江西] 道路拆除
简要题意
给你一个 \(m\) 条边 \(n\) 个点的无向图。你需要去掉一些边,使得 \(1 \to s_1,1 \to s_2\) 连通,且 \(1 \to s_1\) 的最短路径长度小于 \(t_1\),\(1 \to s_2\) 的最短路径长度小于 \(t_2\)。求去掉的边的最大数量。如果无解,输出 \(-1\)。
对于 \(100\%\) 的数据,\(2 \le n,m \le 3000\),\(1\le x,y \le n\),\(2 \le s_1,s_2 \le n\),\(0 \le t_1,t_2 \le n\)。
思路
不难发现,最后答案就是一个树,类似:
            - ... - s1
1 - ...- A
            - ... - s2
就是带重叠的 \(1 \to s_1\) 和 \(1 \to s_2\) 两条最短路径。
那么剩下的就是枚举 \(A\) 节点。先求以 \(1,s_1,s_2\) 三个节点为源点的单源最短路,然后枚举 \(A\)。然后找满足条件的最小值即可。
使用 BFS 求单源最短路,总时间复杂度 \(O(n)\)。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s1,t1,s2,t2,ans=-INT_MAX;
struct edge{
	int nxt,to;
} g[6005];
int head[3005],ec;
void add(int u,int v){
	g[++ec].nxt=head[u];
	g[ec].to=v;
	head[u]=ec;
}
int dis[5][3005];
queue<int> q;
void bfs(int s,int tag){
	memset(dis[tag],0x3f,sizeof(dis[tag]));
	dis[tag][s]=0;
	q.push(s);
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for(int i=head[u];i;i=g[i].nxt){
			int v=g[i].to;
			if((dis[tag][u]+1)<dis[tag][v]){
				dis[tag][v]=dis[tag][u]+1;
				q.push(v);
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1,x,y;i<=m;i++){
		cin>>x>>y;
		add(x,y);add(y,x);
	}
	cin>>s1>>t1>>s2>>t2;
	bfs(1,0);
	bfs(s1,1);
	bfs(s2,2);
	for(int center=1;center<=n;center++){
		if((dis[0][center]+dis[1][center])<=t1 && (dis[0][center]+dis[2][center])<=t2){
			ans=max(ans,m-(dis[0][center]+dis[1][center]+dis[2][center]));
		}
	}
	if(ans<-1e9)cout<<-1;
	else cout<<ans;
	return 0;
}
P5683 [CSP-J2019 江西] 道路拆除的更多相关文章
- [CSP-J2019 江西] 道路拆除 题解
		发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ... 
- 洛谷 P5683 【[CSPJX2019]道路拆除】
		先用做的暴力,因为n最多才3000嘛,但是后来发现时间复杂度不止\(O\)(\({n}^2\)),然后就放弃了. 讲讲我的暴力+错误思路吧: 把1到s1和s2的最短路算出来,用SPFA,然后用DFS求 ... 
- CCF CSP 201409-4 最优配餐
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-4 最优配餐 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越 ... 
- 2019.10.26 CSP%您赛第三场
		\(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ... 
- 【CSP模拟赛】避难向导(倍增lca&树的直径)
		耐力OIer,一天7篇博客 题目描述 “特大新闻,特大新闻!全国爆发了一种极其可怕的病毒,已经开始在各个城市 中传播开来!全国陷入了巨大的危机!大量居民陷入恐慌,想要逃到其它城市以 避难!经调查显示, ... 
- 免费道路 bzoj 3624
		免费道路(1s 128MB)roads [输入样例] 5 7 21 3 04 5 13 2 05 3 14 3 01 2 14 2 1 [输出样例] 3 2 04 3 05 3 11 2 1 题解: ... 
- CSP的今世与未来
		一.从两个工具说起 最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框 ... 
- IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章
		十年前,笔者还是一个刚毕业的大学生,对IT业只是停留在学校的编程知识领域.刚出社会,有很多需要学习的地方.在这十年间,笔者经历了程序员,技术经理,项目经理,部门经理等职位.本文就是要说说如何从程序员到 ... 
- AC日记——寻找道路 洛谷 P2296
		题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ... 
- windows2003安装证书服务:csp配置不正确、您没有此密钥容器的写访问权限
		1.填写CA名称后在生成密钥时提示:csp配置不正确或安装不完整. 原因:可能的原因为CS服务(Crysptographic Service)没有启动 . ps:该服务依赖RPC服务,但RP ... 
随机推荐
- html点击a标签弹窗QQ聊天界面
			以为很难.以为要第三方.谁知道不用.一句话的事情. 1 <a hfer="tencent://message/?uin=12345&Site=&Menu-=yes&qu ... 
- 经典排序算法之-----选择排序(Java实现)
			其他的经典排序算法链接地址:https://blog.csdn.net/weixin_43304253/article/details/121209905 选择排序思想: 思路: 1.从整个数据中挑选 ... 
- sql面试50题------(21-30)
			文章目录 21.查询不同老师所教不同课程平均分从高到低显示 23.使用分段[100,85),[85,70),[70,60),[<60] 来统计各科成绩,分别统计各分数段人数:课程ID和课程名称 ... 
- 学生管理系统(C语言简单实现)
			仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ... 
- JMETER与BeanShell
			变量 Beanshell应用自定义变量有两种方法: #第一种方法,使用${key}格式,但是需要注意这是用应用的变量是没有定义数据类型的 #log.info(String Key)只能打印字符串,所以 ... 
- 初步探索GraalVM——云原生时代JVM黑科技
			1 云原生时代Java语言的困境 经过多年的演进,Java语言的功能和性能都在不断的发展和提高,诸如即时编译器.垃圾回收器等系统都能体现Java语言的优秀,但是想要享受这些功能带来的提升都需要一段时间 ... 
- mindxdl--common--http_handler.go
			// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common this file ... 
- 单节点部署 gpmall 商城
			个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 1 修改主机名: [root@localhost ... 
- 小程序canvas2D绘制印章,话不多说,直接上代码
			效果图: CanvasContext 是旧版的接口,不维护了, 新版 Canvas 2D 接口与 Web 一致 官方文档: https://developers.weixin.qq.com/mini ... 
- CentOS Linux 的安装
			CentOS Linux 的安装 作者:Grey 原文地址: 博客园:CentOS Linux 的安装 CSDN:CentOS Linux 的安装 说明 本安装说明是基于 Windows 10 下 V ... 
