P8604 [蓝桥杯 2013 国 C] 危险系数

题目背景

抗日战争时期,冀中平原的地道战曾发挥重要作用。

题目描述

地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。

我们来定义一个危险系数DF(x,y):

对于两个站点 x 和 y(x!=y), 如果能找到一个站点 z,当 z 被敌人破坏后,x 和 y 不连通,那么我们称 z 为关于 x,y 的关键点。相应的,对于任意一对站点 x 和 y,危险系数DF(x,y) 就表示为这两点之间的关键点个数。

本题的任务是:已知网络结构,求两站点之间的危险系数。

输入格式

输入数据第一行包含 2个整数 n(2≤n≤1000),m(0≤m≤2000),分别代表站点数,通道数。

接下来 m 行,每行两个整数 u,v(1≤u,v≤n,u!=v) 代表一条通道。

最后 1 行,两个数 u,v,代表询问两点之间的危险系数 DF(u,v)。

输出格式

一个整数,如果询问的两点不连通则输出 −1。

输入输出样例

输入

复制代码
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6

输出

复制代码
2

说明/提示

时限 1 秒, 64M。蓝桥杯 2013 年第四届国赛

解题思路

暴搜,我们可以求出所有的路径,并标记所有路径中的点,当某个点被标记的数量等于总路径数量时,这个点就为关键点

代码实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
vector<int>s[N];
int f[N][N],mid[N];
bool st[N];
int x,y,k=-1,d;

void dfs(int t){
	if(t==y){
		if(k==-1)k=0;
		k++;
		for(int i=1;i<=d;i++)if(st[i])mid[i]++;
		return;
	}
	st[t]=true;     //把走过的点都标记一下,防止重复走同一个点 
	for(int i=0;i<s[t].size();i++){
		if(st[s[t][i]])continue;      //被标记,代表已经被走过了,直接跳过 
		dfs(s[t][i]);     //递归到下一层 
	}
	st[t]=false;   //回溯 
}


int main(){
	int n,m;
	cin>>n>>m;
	while(m--){
		int a,b; 
		cin>>a>>b;
		s[a].push_back(b);    //因为地道是双向的,所以要存两边 
		s[b].push_back(a);
		d=max(d,max(a,b));	  //求出最大的点,确定最后求答案时的范围 
	}
	cin>>x>>y;
	dfs(x);
	int ans=0;
	for(int i=1;i<=d;i++)if(mid[i]==k)ans++;
	cout<<ans-1<<endl;    //最终答案要减去出发点 
	return 0;
}
相关推荐
CV金科1 天前
蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)
stm32·单片机·嵌入式硬件·算法·蓝桥杯
TANGLONG2221 天前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
ya888g1 天前
蓝桥等级考试C++组17级真题-2023-05-21
开发语言·c++·蓝桥杯
SZPU领跑1 天前
第十二届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一套)
stm32·单片机·算法·职场和发展·蓝桥杯
TANGLONG2222 天前
【C语言】字符和字符串函数(2)
java·c语言·c++·python·考研·面试·蓝桥杯
Tlog嵌入式2 天前
蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键
arm开发·stm32·单片机·mcu·物联网·蓝桥杯·iot
奔跑的乌龟_2 天前
第 17 场小白入门赛蓝桥杯
算法·蓝桥杯
Tlog嵌入式3 天前
蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555
stm32·单片机·mcu·物联网·蓝桥杯·iot
奔跑的乌龟_3 天前
第18场小白入门赛(蓝桥杯)
算法·蓝桥杯
TANGLONG2223 天前
【C语言】内存函数的使用和模拟实现
java·c语言·c++·python·考研·面试·蓝桥杯