KDY-深搜模拟赛2补题报告
2024.6.1one last 6.1快乐
一.比赛题目
T1图的m着色问题 0/100(没时间做了,一个皇后问题的变版)
T2最大人工岛 100/100(开始思路错了但如有神助)
T3和为k的组合 100/100
二.比赛流程
T1最后30秒看了下题目也没做,T2做了40分钟,T315分钟秒了。当时T2想法有问题不过比赛后看出来了。
三.题解报告
我们这次不多说废话(代码我也不打了要去背史地生了)。
T1 图的m着色问题
题目描述
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m 种颜色,找出所有不同的着色法。
编程任务: 对于给定的无向连通图G和m种不同的颜色,编程计算图的所有不同的着色法。
输入描述
第1行有3个正整数n,k 和m,表示给定的图G有n个顶点和k条边,m种颜色。顶点编号为1,2,…,n。
接下来的k行中,每行有2个正整数u,v,表示图G 的一条边(u,v)。
数据范围:1<n≤100,1<k≤2500,1<m≤6
输出描述
将计算出的不同的着色方案数输出。
样例
输入
5 8 4 1 2 1 3 1 4 2 3 2 4 2 5 3 4 4 5
输出
48
解题思路
这个题一看样例就知链式前向星,存好直接按位置深搜即可。每次有M种放法,放好之后再判断一下和临界点有没有重复的,数据量很小不需担心爆时间,注意回溯。
T2 最大人工岛
题目描述
在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)
输入描述
第一行输入两个整数n m(1 <= n,m <= 500 ),代表grid的高和长,
接下来的n行输入m个整数,代表岛屿或者水域
输出描述
输出一行一个整数,代表最大人工岛的面积。
样例
输入
2 2 1 0 0 1
输出
3
解题思路+AC码
首先看到这个题目,我们可能会想把每一个海洋变成陆地然后算这个时候的最大联通区块,但是会爆时间(如果说500*500地图全是0,时间就是500*500*4*500,10的8次方,再加上输入输出和边表的时复就会爆),所以我们会想到先用一次DFS判断每一个点所在联通区块面积Ai(海洋为0),此时每一个海洋改成陆地后产生的陆地就是海洋的上面下面左边右边点的Ai(当然要去重)+1,这时不会爆时间了。
具体的实现细节自己看代码去
需要注意求联通区块面积不能写成平行的,例如
这里maxx的值会少,因为这个点往其他所有方向都是平行不会影响的。
真AC码
这里注释掉的是我考试时调试代码用的,可以不看🙈。
T3 和为k的组合
输入描述
多组输入,每组输入数据如下:
第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9)
第2 - N + 1行:每行1个数,对应数组的元素A[i] (1 <= A[i] <= 10^6)
注意:多组输入以0 0 结束。
输出描述
对于每组数据:如果可以,输出:"Yes",否则输出"No"。
样例
输入
5 13 2 4 6 8 10 0 0
输出
No
解题思路+AC码
注意输出格式,这个题就是考验你如何遍历每一种情况(他的数据量很小)。最简单的方法就是把它看成一个二叉树,左孩子是拿,右孩子是不拿,每次都判断一下找没找到还有是不是找完东西了。时间复杂度时2*20次方,不加剪枝也是能过的。