[蓝桥杯]算法提高 vertex cover(dfs)
问题描述
给定一个N个点M条边的无向图G(点的编号从1至N),问是否存在一个不超过K个点的集合S,使得G中的每条边都至少有一个点在集合S中。
输入格式
输入的第一行包含一个整数T,表示数据的组数。
接下来T组数据中:每组输入的第一行包含三个整数n, m, k,分别表示图的点数,边数,集合点数的最大值。接下来m行,每行2个正整数x,y,表示编号为 x 的节点与编号为 y 的节点间有一条边相连。
输出格式
对于每组测试数据,若其存在解,则将解输出出来:第一行为一个整数t,表示所选点集的大小;第二行为t个整数,表示所选的点的编号。如果存在多组解,只要输出其中一种方案即可(会有special judge程序对你的输出进行检查)。
若该组测试数据不包含解,则输出一个数-1(一行)。
样例输入
2
10 8 3
6 4
7 2
7 4
7 6
9 3
9 5
10 6
10 9
10 8 2
6 4
7 2
7 4
7 6
9 3
9 5
10 6
10 9
样例输出
3
6 7 9
-1
数据规模和约定
对于80%的数据,满足 0<n<=20, m<=200, k<=20。
所有的数据满足 0<n<=100, m<=5000, k<=20。
思路:这个题目没有想到挺好的方法,就是暴力搜索。但是这个题目的数据量并没有它所说的那么大,所以就过了。如果有好的方法,希望路过的大佬可以指正。
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e2+10;
const int maxm=5e3+10;
struct node{int x,y;
}p[maxx];
int vis[maxx];
int n,m,k;inline void init()
{memset(vis,0,sizeof(vis));
}
inline int dfs(int i,int &ans)
{if(ans>k) return 0;if(i>m){if(ans<=k) return 1;return 0;}if(!vis[p[i].x]&&!vis[p[i].y]){vis[p[i].x]=1;if(dfs(i+1,++ans)) return 1;vis[p[i].x]=0;ans--;vis[p[i].y]=1;if(dfs(i+1,++ans)) return 1;vis[p[i].y]=0;ans--;return 0;}else return dfs(i+1,ans);
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&k);init();for(int i=1;i<=m;i++) scanf("%d%d",&p[i].x,&p[i].y);int ans=0;if(!dfs(1,ans)) printf("-1\n");else{printf("%d\n",ans);for(int i=1;i<=n;i++) if(vis[i]) printf("%d ",i);puts("");}}return 0;
}
努力加油a啊,(o)/~
[蓝桥杯]算法提高 vertex cover(dfs)相关推荐
- [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- JAVA 蓝桥杯 算法提高 阮小二买彩票
JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...
- [蓝桥杯][算法提高VIP]夺宝奇兵-dp
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- [蓝桥杯][算法提高VIP]阮小二买彩票
[蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...
- 【蓝桥杯算法提高VIP-开灯游戏(两种超易理懂解法:暴力/位操作(切换位))(纯正C语言代码)】
蓝桥杯算法提高VIP-开灯游戏 题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二, ...
- [蓝桥杯][算法提高] 填充蛋糕
[蓝桥杯][算法提高] 填充蛋糕 编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面) 读入一个数r,输出需要奶油的表面积,结果保留一位小数 样例输入 5.0 样例输 ...
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- JAVA 蓝桥杯 算法提高 色盲的民主
JAVA 蓝桥杯 算法提高 色盲的民主 资源限制 时间限制:1.0s 内存限制:256.0MB 色盲的民主 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自 ...
- [蓝桥杯][算法提高VIP]阮小二买彩票[递归全排列]
题目 1578: [蓝桥杯][算法提高VIP]阮小二买彩票 时间限制: 1Sec 内存限制: 128MB 提交: 348 解决: 153 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都 ...
最新文章
- linux shell脚本if,linux的shell脚本中if,for,while的解析与应用
- IC Order search 的debugging关键点
- ios基础之 ARC
- 计算机原码、反码、补码详解
- C学习杂记(四)sizeof计算联合体大小
- 【2017年第3期】面向共享的政府大数据质量标准化问题研究
- jedis开发过程中遇到的问题及其解决方法
- window php 安装zip扩展,Windows下安装php_rar 扩展,让php实现rar文件的读取和解压
- WPF 禁止在文本框中输入数字
- 计算机网络基础代码,计算机网络基础知识(示例代码)
- es6html模板,js 字符串模板 ES6
- mysql主祝福hi_MySql - GROUP BY 和 HAVING关键字
- HP服务器集成 iLO 端口的配置
- pandas处理mysql 展现wpf_Pandas DataFrame使用多列聚合函数
- matlab 扩大虚拟内存,matlab 扩大虚拟内存
- SAP中文件的上传和下载
- java来电报名字的软件_教你一招,手机来电话可以语音报出来电人的姓名和电话号码,收藏...
- 算法图解——の——二分查找【附带pdf下载链接】
- List转Map-JDK8实现
- 手机可以连上wifi,电脑连不上怎么办?
热门文章
- C++和C#相互调用COM组件的方法简介
- python 矩阵元素赋值_对numpy中数组元素的统一赋值实例
- 一个列中多行求和_Excel 用选项求和及用快捷键快速求和,同时对多单元格求和...
- mysql中删除某一纵的方法_sql数据库:如何在一个表中填加或者删除一个字段!...
- 隐藏滚动条或更改滚动条样式加制作三角形
- nginx 返回动态Html,Nginx负载均衡
-Nginx动态更新upstream
- Java 阿里巴巴数据源_阿里P7教你如何使用 Spring 配置动态数据源实现读写分离
- Android开发之自定义view进行旋转动画
- Android关于Handler发送消息里面的arg1和arg2以及obj和what的用法
- php thumbs.db,window_Win8系统删除thumbs.db文件的方法, 最近有Win8系统用户反映, - phpStudy...