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

    问题描述

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

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

    我们来定义一个危险系数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
    思路:求两点间的割点,可以算出dfs两点间所有的路径,记录一下每次路径都出现的点即是所求的割点(除去初始点和目标点)
    code:
    #include<bits/stdc++.h>
    using namespace std;
    
    vector<int>d[1005];
    int way[1005],cnt[1005],vis[1005];///记录该路径数点的出现次数。
    int n,m,u,v,sum;
    void dfs(int u,int depth){
       way[depth]=u;
       if(u==v){
            sum++;///路径数
            for(int i=0;i<=depth;i++){///经过的点数
                cnt[way[i]]++;
            }
            return ;
        }
        for(int i=0;i<d[u].size();i++){
            if(vis[d[u][i]]==0){
                vis[d[u][i]]=1;
                dfs(d[u][i],depth+1);
                vis[d[u][i]]=0;
            }
        }
    }
    int check(){
        int ans=0;
        for(int i=1;i<=n;i++){
            ///cout<<i<<" "<<cnt[i]<<endl;
            if(cnt[i]==sum){
                ans++;
            }
        }
        ans-=2;
        return ans;
    }
    int main(){
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>u>>v;
            d[u].push_back(v);
            d[v].push_back(u);
        }
        cin>>u>>v;
        vis[u]=1;
        dfs(u,0);
        if(check()<0)cout<<"-1"<<endl;
        else cout<<check()<<endl;
        return 0;
    }
  • 相关阅读:
    01 HTTP协议_servlet基础
    JS 08表单操作_表单域
    09 多态
    JS 07 Dom
    JS 06 bom 框窗_页面_定时任务
    JS 05 json
    08 包_继承
    JS 04 Date_Math_String_Object
    【Java每日一题】20161018
    【Java每日一题】20161017
  • 原文地址:https://www.cnblogs.com/mohari/p/13509803.html
Copyright © 2011-2022 走看看