首页 > 其他分享 >P5683 [CSP-J2019 江西] 道路拆除

P5683 [CSP-J2019 江西] 道路拆除

时间:2022-10-22 21:34:52浏览次数:62  
标签:le int ec P5683 bfs tag J2019 CSP dis

简要题意

给你一个 \(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;
}

标签:le,int,ec,P5683,bfs,tag,J2019,CSP,dis
From: https://www.cnblogs.com/zheyuanxie/p/p5683.html

相关文章

  • P7914 [CSP-S 2021] 括号序列
    简要题意给定\(k\),定义“超级括号序列”(简称括号序列,下同)字符串为:仅由()*三种字符组成。下面令\(S\)为不超过\(k\)个\(\ast\)字符拼接而成的字符串(\(S\)......
  • 2022/10/22 CSP赛前隔离时的模拟赛 1/3
    T1T2使用一种类似于摩尔投票法的东西(Keven_He说像,我不太觉得):将所有人分为两队,设第一队的总攻击力为\(a\),第二队的总攻击力为\(b\)。不妨设\(a\leb\),求\(\min(b-......
  • CSP-S模拟20
    T1.归隐签到题吧算是。看到数据范围直接来推结论。先把对数去掉,就变成了指数项的加法。容易发现\(a_i=3a_{i-1}+1\),除了两侧的数,其它的贡献都翻了一倍放在中间。然后用等......
  • CSP 2022备战 STL
    只要不上网课,大概是最后一篇?一.vectorvector,中文名容器,它可以容纳许多数据类型头文件:#include<vector>定义:vector<数据类型>变量名;也可以vector<数据类型>变量名(数......
  • 第二十三章 CSP Session 管理 - 身份验证共享策略
    第二十三章CSPSession管理-身份验证共享策略本节介绍如何通过两种方式创建一组应用程序以作为一个组工作:共享认证:如果应用程序不共享认证,用户必须分别登录到被另一......
  • CSP 普及 & 提高 考点 模板合集
    CSP普及&提高考点零、杂项加速cin/cout:ios::sync_with_stdio(false);。注:放在main函数的第一行,但使用它之后不能使用scanf/printf。避坑/防爆0指南。快读:inl......
  • 第二十章 CSP Session 管理 - 状态管理
    第二十章CSPSession管理-状态管理状态管理因为HTTP是无状态协议。为Web编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。CSP提供了许多用于状态......
  • 补CSP2020
    T1儒略日丧心病狂.jpg就是我也调了一会。对于一道T1来说确实挺久的,而且我交了好几发才过((T2动物园我们仍未知道出题人为什么不把他放到T1智障题T3函数调用拓扑......
  • 2022.10.18 CSP2022 模拟赛五
    旅行路线Source:CF459E。憨憨题。按\(w\)排序后,考虑DP,设\(f_u\)表示目前在点\(u\),可以走出的最长路线。按阶段转移的时候稍微注意一下相同边权的处理,具体的,开一个......
  • 2022 CSP-S 游记
    \(2022-9-18\)初赛在考场门口听到有人在聊florr.io,florr怕不是风靡\(OI\)圈了。宇宙射线什么东西。\(2022-9-27\\Day\-\infty\)出分了,还好过了,同机房的报了提高组的......