试题 历届试题 危险系数
作者:互联网
资源限制 时间限制: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 61 3
2 3
3 4
3 5
4 5
5 6
1 6 样例输出 2 这题用深搜就可,先深搜判断询问的两点间是否连通(因为1 <= u, v <= n,所以令要排除测试的点为0即可判断),若连通,则一个个点做排除测试,若排除该点后可行路径数为0,那么说明这是一个关键点,危险系数df加一. 注意剪枝,一旦发现该点不是关键点,就直接终止测试.
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <string> 6 #include <cmath> 7 #include <map> 8 #include <algorithm> 9 #define INF 0x3f3f3f3f 10 #define zero 1e-7 11 12 using namespace std; 13 typedef long long ll; 14 const ll mod=1e9+7; 15 const ll max_n=1005; 16 17 struct node { 18 int u, v; 19 }e[max_n<<1]; 20 21 int n, m;//站点数,通道数 22 int su, sv;//询问的两点 23 int ans=0;//排除某点后可行的路径数 24 bool vis[max_n]={false};//标记是否访问过 25 bool flag[max_n]={false};//标记改点是否排除测试过 26 27 void dfs(int s, int del) {//源点,要排除测试的点 28 vis[s]=true; 29 for(int i=0; i<m; i++) { 30 if(e[i].u==s && !vis[e[i].v] && e[i].v!=del) { 31 if(e[i].v==sv) 32 ans++; 33 else 34 dfs(e[i].v, del); 35 } 36 if(e[i].v==s && !vis[e[i].u] && e[i].u!=del) { 37 if(e[i].u==sv) 38 ans++; 39 else 40 dfs(e[i].u, del); 41 } 42 if(ans) return;//一旦找到排除点del后仍能使询问的两点连通的路径,即del不是关键点,则直接终止测试 43 } 44 vis[s]=false; 45 } 46 47 int main() { 48 cin>>n>>m; 49 int df=0; 50 for(int i=0; i<m; i++) { 51 cin>>e[i].u>>e[i].v; 52 } 53 cin>>su>>sv; 54 dfs(su, 0);//先判断不排除任何点时,询问的两点是否连通 55 if(!ans) df=-1;//若询问的两点不连通则令df=-1 56 else { 57 for(int i=1; i<=n; i++) { 58 ans=0; 59 if(i!=su && i!=sv && !flag[i]) { 60 flag[i]=true; 61 memset(vis, false, sizeof vis);//注意要重新初始化 62 dfs(su, i); 63 if(!ans) df++; 64 } 65 } 66 } 67 cout<<df<<endl; 68 return 0; 69 } 70 /* 71 5 4 72 1 3 73 2 3 74 1 4 75 4 5 76 2 5 77 78 3 79 */
标签:连通,系数,试题,int,站点,两点,历届,include 来源: https://www.cnblogs.com/wwqzbl/p/13579670.html