蓝桥--危险系数(求两点之间的割点个数)

历届试题 危险系数

时间限制:1.0s   内存限制:256.0MB

问题描述

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

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

我们来定义一个危险系数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

分析:没思路看了题解=_=...

大神是这样说的:遍历s到t的所有路径,假设有ans条路径,对于割点a来说,在这ans条路径上都有a,所以a才成为了割点。

这里用了链表结构用来存图,都不记得怎么用了=_=...

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 const int N = 1000 + 10;
 6 const int M = 2000 + 10;
 7 struct node
 8 {
 9     int to, Next;
10 };
11 node edge[M];
12 int n, m;
13 int cnt[N], way[N], vis[N];
14 int tot, ans;
15 int head[N];
16 void add(int u, int v)
17 {
18     edge[tot].to = v;
19     edge[tot].Next = head[u];
20     head[u] = tot++;
21 }
22 void dfs(int x, int t, int n)
23 {
24     if(x == t)
25     {
26         ans++;
27         for(int i = 0; i < n; i++)
28             cnt[way[i]]++;
29         return ;
30     }
31     for(int u = head[x]; u != -1; u = edge[u].Next)
32     {
33         int v = edge[u].to;
34         if(!vis[v])
35         {
36             vis[v] = 1;
37             way[n] = v;
38             dfs(v, t, n + 1);
39             vis[v] = 0;
40         }
41     }
42 }
43 int fun()
44 {
45     int ret = 0;
46     for(int i = 1; i <= n; i++)
47         if(cnt[i] == ans)
48             ret++;
49     return ret;
50 }
51 int main(int argc, char** argv)
52 {
53     scanf("%d%d", &n, &m);
54     memset(cnt, 0, sizeof(cnt));
55     memset(way, 0, sizeof(way));
56     memset(head, -1, sizeof(head));
57     memset(vis, 0, sizeof(vis));
58     tot = ans = 0;
59     for(int i = 0; i < m; i++)
60     {
61         int a,b;
62         scanf("%d%d", &a, &b);
63         add(a, b);
64         add(b, a);
65     }
66     int s, t;
67     scanf("%d%d", &s, &t);
68     vis[s] = 1;
69     dfs(s, t, 0);
70     printf("%d\n", fun() - 1); // 因为多算了个t
71     return 0;
72 }

时间: 2024-10-12 14:01:37

蓝桥--危险系数(求两点之间的割点个数)的相关文章

武汉科技大学ACM :1006: 零起点学算法25——求两点之间的距离

Problem Description 输入平面坐标系中2点的坐标,输出它们之间的距离 Input 输入4个浮点数x1 y1 x2 y2,分别是点(x1,y1) (x2,y2)的坐标(多组数据) Output 输出它们之间的距离,保留2位小数(每组数据一行) Sample Input 1 0 2 0 Sample Output 1.00 1 #include<stdio.h> 2 3 #include<math.h> 4 5 6 7 int main() 8 9 { 10 11 f

求两点之间最短路径-Dijkstra算法

 Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等.注意该算法要求图中不存在负权边. 问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径.(单源最短路径) 2.算

根据经纬度求两点之间距离(mysql 函数)

1 DROP FUNCTION IF EXISTS `getDistance`; 2 DELIMITER ;; 3 CREATE FUNCTION `getDistance`( 4 lon1 float(10,7) 5 ,lat1 float(10,7) 6 ,lon2 float(10,7) 7 ,lat2 float(10,7) 8 ) RETURNS double 9 begin 10 declare d double; 11 declare radius int; 12 set radi

求两点之间的水平线

版权声明:本文为博主原创文章,未经博主允许不得转载.

URAL 题目1553. Caves and Tunnels(Link Cut Tree 改动点权,求两点之间最大)

1553. Caves and Tunnels Time limit: 3.0 second Memory limit: 64 MB After landing on Mars surface, scientists found a strange system of caves connected by tunnels. So they began to research it using remote controlled robots. It was found out that ther

UESTC(LCA应用:求两点之间的距离)

Journey Time Limit: 15000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Bob has traveled to byteland, he find the N cities in byteland formed a tree structure, a tree structure is very special structure, there is exactly one path

求两点之间的距离

import java.util.Scanner; public class TestObject {     public static void main(String[] args) {         // TODO Auto-generated method stub         Scanner in = new Scanner(System.in);         System.out.println("请输入第一个坐标点:");         int x1 = i

URAL 题目1553. Caves and Tunnels(Link Cut Tree 修改点权,求两点之间最大)

1553. Caves and Tunnels Time limit: 3.0 second Memory limit: 64 MB After landing on Mars surface, scientists found a strange system of caves connected by tunnels. So they began to research it using remote controlled robots. It was found out that ther

蓝桥杯PREV_12危险系数

题目: 历届试题 危险系数 时间限制:1.0s   内存限制:256.0MB 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点.相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个