[蓝桥杯]PREV-12.历届试题_危险系数
问题描述
抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。 本题的任务是:已知网络结构,求两站点之间的危险系数。 输入格式
输入数据第一行包含2个整数n( <= n <= ), m( <= m <= ),分别代表站点数,通道数; 接下来m行,每行两个整数 u,v ( <= u, v <= n; u != v)代表一条通道; 最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。 输出格式
一个整数,如果询问的两点不连通则输出-.
样例输入 样例输出
题目描述
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max_ 3000 typedef struct node node_t;
typedef struct node
{
int n; //下一个站点
node_t *next;
}node; int n,m,u,v,res;
int vis[Max_]; //标记站点是否被访问
int walk[Max_]; //记录单次行走路径的站点
int use[Max_]; //标记成功路径下的站点次数
node *e[Max_]; //邻接表,记录各站点之间的联系 void add_edge(int x,int y)//添加两站点之间的边
{
node *p;
p = (node*)malloc(sizeof(node));
p->n = y;
p->next = e[x];
e[x] = p;
return ;
} void init()//初始化
{
int i,x,y; memset(vis,,sizeof(vis));
memset(walk,,sizeof(walk));
memset(use,,sizeof(use));
for (i= ; i<=n ; i++)
e[i] = NULL; scanf("%d%d",&n,&m); //站点,通道数 for (i= ; i<m ; i++)
{
scanf("%d%d",&x,&y);
add_edge(x,y); //无向图,双向
add_edge(y,x);
}
scanf("%d%d",&u,&v); //起点,终点 return ;
} void DF(int x,int step)
{
node *p = e[x];
walk[step] = x; //记录当前路径的站点 if (x == v)
{
res ++; //成功路径的次数+1
for (x= ; x<step ; x++)
use[walk[x]]++; //标记成功路径下的站点
return ;
} while (p != NULL)
{
if (vis[p->n] == )//下一个站点未被访问
{
vis[p->n] = ;
DF(p->n,step+);
vis[p->n] = ;
}
p = p->next;//查找当前与站点连接的下一个站点
} return ;
} int main(void)
{
int i,k;
init();
k = res = ; vis[u] = ; //标记起点访问
DF(u,); for (i= ; i<=n ; i++)
if (use[i]==res)//站点标记数,与成功路径数相同,即为u与v的关键点
k ++; printf("%d",k-);
return ;
}
C解法
错误:理解为寻找最短路径,实际是寻找能被多次抵达终点的站点数(与成功抵达终点的次数相同)
解题思路:
建立站点之间联系,遍历能够抵达终点的路径,并对成功路径上的站点做次数+1
当遍历完成后,查找与成功次数相同的站点(即该站点与抵达终点有必然关系)
[蓝桥杯]PREV-12.历届试题_危险系数的更多相关文章
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- 蓝桥杯练习系统历届试题 带分数 dfs
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- 【蓝桥杯单片机12】实时时钟DS1302的基本操作
[蓝桥杯单片机12]实时时钟DS1302的基本操作 广东职业技术学院 欧浩源 实时时钟DS1302几乎是蓝桥杯“单片机设计与开发”每年必考的内容,虽然在竞赛现场有提供一个底层读写寄存器的库文件,但是作 ...
- [蓝桥杯]PREV-22.历届试题_国王的烦恼
问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲刷,有一些大桥面临着不能使用的危险. 如果两个小岛间 ...
- [蓝桥杯]PREV-44.历届试题_青蛙跳杯子
问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...
- [蓝桥杯]PREV-10.历届试题_幸运数
问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的“筛法”生成 . 首先从1开始写出自然数1,,,,,,.... 就是第一个幸运数. 我们从2这个数开始.把所有序号能被2整除的项删除,变 ...
- [蓝桥杯]PREV-27.历届试题_蚂蚁感冒
问题描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...
- [蓝桥杯]PREV-26.历届试题_最大子阵
问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和 ...
- [蓝桥杯]PREV-25.历届试题_城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有n个比较重要的地点,市长希望这些地点重点被考虑.现在 ...
随机推荐
- mknod语法
1.语法 mknod [选项] 设备名 设备类型 主设备号 次设备号 2.选项参数列表 选项 说明 --version 显示命令版本信息 --help 显示帮助信息 -m | - ...
- 计算机网路中CDP,LLDP,STP的详解
CDP,LLDP,STP知识详解 (1) CDP CDP(Cisco Discovery Protoco:Cisco发现协议)是Cisco专有的用来发现邻接点的协议 ,所有的Cisco产品都支持CDP ...
- svg的使用集合
1.效果 https://www.zhangxinxu.com/wordpress/2017/03/offset-path-css-animation/ 2.用法 https://www.cnblog ...
- [转]如何正确学习JavaScript
原文:How to Learn JavaScript Properly(2014-2-7) 学习时长:6-8周 学习前提:中学水平,无需编程经验 更新(2014-1-7) 在Reddit上创建了一个学 ...
- Python学习之路基础篇--11-12Python基础,函数的装饰器
对于装饰器来说,就是在不改变函数的调用的情况下,对函数的前后增加了些许功能,这完全符合函数的 开放封闭 原则.装饰器的本质 其实就是一个闭包函数. 这是一个装饰器的步骤图 ret = func(*ar ...
- shell脚本-2
http://www.runoob.com/linux/linux-shell-variable.html 字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号字符 ...
- MATLAB 进行五种边缘检测
自定义函数: function []=edge_detect(image_name) a=imread(image_name); I=rgb2gray(a); BW1=edge(I,'Roberts' ...
- P2568 莫比乌斯反演+整除分块
#include<bits/stdc++.h> #define LL long long using namespace std; ; bool vis[maxn]; int prime[ ...
- cf352E Jeff and Brackets dp+矩阵快速幂(加法+min运算)
题意大致是这样的,一共要放 m 段括号序列,每一段放 n 个括号,也就是放 n*m个括号,再每一段中的 n 个位置分别有放左括号和右括号的代价,问最终摆放出合法的括号序列的最小代价是多少. 另外保证, ...
- 软件可维护性的影响因素&如何提升
影响因素: 1.可理解性 2.可测试性 3.可修改性 4.可移植性 5.可重用性 如何提升: 1.建立明确的软件质量目标2.使用先进的软件开发技术和工具3.建立明确的质量保证4.选择可维护的语言5.改 ...