首页 > 其他分享 >CSP-S 2022 T1题解

CSP-S 2022 T1题解

时间:2022-10-31 08:11:05浏览次数:58  
标签:int 题解 ll long T1 2022 CSP dis

题目描述 :

在一张图中找到能够到达的四个点,使之点权之和最大。

先说说考场上的思路吧,要求不超过k次转车,其实就是要求长度不超过k。所以只需要找出这张图的全源最短路,然后建好新图,在新图里直接跑dfs求解。

但是没有想出合适的求全源最短路的算法,直接跑了floyd,而且没有剪枝操作,时间复杂度很高。而且没开long long 部分分也没拿到。

现在补上T1的正解:

对于每个点,只要能在k次搜索前搜到,就一定能到达,所以直接bfs搜索,n^2建好新图,跑dfs,对于每个点,如果从1号点走x步到达该点,如果此时状态不是最优的,答案一定不会被更新。换句话说,从1号点出发,走到该点的权值总和要最大,才能求出最优解。

 

代码奉上:

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int N = 1e4 + 100;

int n, m, k;

int dis[2510][2510];

ll ans;

bool vis[N];

ll w[N], d[N][5];

vector<int>q1[2520], q2[2520];

void bfs(int s){
	queue<int>q;
	q.push(s);
	dis[s][s] = 0;
	while(q.size()){
		int x = q.front();
		q.pop();
		if(dis[s][x] > k + 1) return ;
		if(dis[s][x] <= k + 1) q2[s].push_back(x);
		for(int i = 0;i < q1[x].size();i ++){
			int u = q1[x][i];
			if(dis[s][u] == 0x3f3f3f3f){
				dis[s][u] = dis[s][x] + 1;
				q.push(u);
			}
		}
	}
}

void dfs(int x, int dep, ll sum){
	if(sum <= d[x][dep]) return;
	d[x][dep] = sum;
	if(dep == 4){
		if(x != 1 && dis[1][x] <= k + 1) ans = max(ans, sum);
		return;
	}
	for(int i = 0;i < q2[x].size();i ++){
		int u = q2[x][i];
		if(vis[u] || u == 1) continue;
		vis[u] = 1;
		dfs(u, dep + 1, sum + w[u]);
		vis[u] = 0;
	}
}

int main(){
	scanf("%d%d%d", &n, &m, &k);
	for(int i = 2;i <= n;i ++){
		scanf("%lld", &w[i]);
	}
	for(int i = 1;i <= m;i ++){
		int a, b;
		scanf("%d%d", &a, &b);
		q1[a].push_back(b);
		q1[b].push_back(a);
	}
	memset(dis, 0x3f, sizeof dis);
	for(int i = 1;i <= n;i ++){
		bfs(i);
	}
	memset(vis, 0, sizeof vis);
	memset(d, -0x3f, sizeof d);
	dfs(1, 0, 0);
	cout << ans << "\n";
	return 0;
}

标签:int,题解,ll,long,T1,2022,CSP,dis
From: https://www.cnblogs.com/dzdyshenqing/p/16843007.html

相关文章

  • CSP-S2022游记
    Day-114514初赛过了,好像是\(88.5\)。Day0上午+下午做了几道\(CF\),下午最后\(1h\)在\(generals.io\)中水过。(似乎是传统,而且每次我最先挂)。晚上开始打板子,tarja......
  • P8819 CSP-S 2022 星战
    P8819CSP-S2022星战-洛谷|计算机科学教育新生态(luogu.com.cn)很棒的一道题,虽然一开始阅读理解确实掉了印象分,但后来做出来发现,瑕不掩瑜。先翻译一下题目:\(n\)......
  • 2022信息安全专业保研经历
    9.28终于来了,推免到此结束,上交网安专硕,感觉还是比较满足的吧,找了一个还不错的导师,这两三个月的煎熬生活算是结束了,写个小帖子记录一下这段保研的经历。offer:上交网安专硕......
  • CSP-S2022总结
    2022-10-29成都七中高新校区14:30-18:30先快速看了一遍题,发现T1看上去简单,T2“看上去”是一个很难的博弈论(其实非常简单,但是我没有花时间仔细的研究),T3是个维护图之类的数......
  • P8818 CSP-S 2022 策略游戏
    P8818CSP-S2022策略游戏-洛谷|计算机科学教育新生态(luogu.com.cn)矩阵这个描述就是障眼法。翻译一下题目:A在\(a[l_1\cdotsr_1]\)中选择一个\(x\),然后B......
  • 2022-2023-1 20221409 《计算机基础与程序设计》第九周学习总结
    2022-2023-120221409《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里如2022-202......
  • 2022/10/29选拔赛
    A:DeliveryBears传送门题意:给定\(n\)点\(m\)边的有向图,边有边权\(c\)。有\(x\)只熊,每只熊可以携带相同重量的物品,每只熊从\(1\)出发把物品运到\(n\)处。对每......
  • 2022-2023-1 20221402 《计算机基础与程序设计》第九周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第一周......
  • [CSP-S 2022] 星战
    link首先手玩一下满足条件的图,只需要满足条件二:所有点出度为1,条件1会自然满足,我们必然可以顺着其出边走下去。code......
  • CSP-S2022
    luogu上还是240,和出考场时的估分差不多,不算很理想(感觉上考场一紧张代码能力直线下降。上来T1,T2都是一眼看出做法,但调代码花了很久,到16:30左右才顺利过完所有数据。然后......