zoukankan      html  css  js  c++  java
  • 试题 历届试题 危险系数

    资源限制
    时间限制: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
     
     
    这题用深搜就可,先深搜判断询问的两点间是否连通(因为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 */
     
  • 相关阅读:
    UBUNTU 自动挂载 NTFS
    automake autoconf 学习笔记(转载)
    error: X11/extensions/XInput.h: No such file or directory
    error: undefined macro: AC_PROG_LIBTOOL
    Linux下tar.xz结尾的文件的解压方法
    Ubuntu 修改hosts
    ubuntu主目录下的中文文件夹名改回英文
    ./configure: No such file or directory
    Ubuntu下GTK的安装、编译和测试
    图像适配源码
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/13579670.html
Copyright © 2011-2022 走看看