lanqiao OJ 264 危险系数

简介: lanqiao OJ 264 危险系数

题库 - 蓝桥云课 (lanqiao.cn)

这个题主要是做好如何处理割点问题,就是记录每一次找到一个路径,就把每一个的该路径上的点多一次计数,同时我们要找到所有路径的个数,全部找到完以后遍历count数组,如果找到和我们路径数相同的,就让最终输出值+1 ;

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std ;
const int N = 1010 ;
int n , m ;
int x,y;
int path[N] ;//记录路径,因为我们要找到最后的路径要判断是否走到终点
vector<int> a[N] ;
int v[N] ;
int c[N] ;
int cnt ;
int ans ;
void dfs1(int u , int fa){
  if(path[u-1] == y){//走到终点
    for(int i = 1 ; i <= n ; i ++) if(v[i]) c[i] += 1 ;//走到终点就记录每一个走过的点计数+1
    cnt ++ ;
    return ;
  }
  for(int i = 0 ; i < a[fa].size() ; i ++){//排列
    if(!v[a[fa][i]]){
      v[a[fa][i]] = 1 ;
      path[u] = a[fa][i] ;
      dfs1(u + 1 ,a[fa][i]) ;
      path[u] = a[fa][i] ;
      v[a[fa][i]] = 0 ;
    }
  }
  
}
 
 
int main(){
  cin >> n >> m ;
  while(m -- ){
    int i, j ;
    cin >> i >> j ;
    a[i].push_back(j) ;
    a[j].push_back(i) ;
  } 
  cin >> x >> y ;
  //for(int i = 1 ; i <= 6 ; i ++) cout << a[i][1] << " " ;cout<< endl ;
  path[0] = x ;
  v[x] = 1 ;
  dfs1(1,x) ;
  //cout << cnt << endl ;
  //for(int i = 0 ; i < cnt ; i ++) cout << path[i] << " " ;
  for(int i = 1 ; i <= n ; i ++ ) if(c[i] == cnt) ans ++ ;
  cout << ans - 2<< endl ;
  return 0 ;
}
目录
相关文章
|
5月前
递推7-2 sdut-C语言实验-养兔子分数
递推7-2 sdut-C语言实验-养兔子分数
24 0
|
2月前
lanqiao OJ 239 最优包含
lanqiao OJ 239 最优包含
18 2
|
2月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
16 2
|
2月前
lanqiao OJ 229 迷宫与陷阱
lanqiao OJ 229 迷宫与陷阱
25 1
|
2月前
lanqiao OJ 644 方格分割
lanqiao OJ 644 方格分割
20 1
|
2月前
lanqiao OJ 246 矩阵计数
lanqiao OJ 246 矩阵计数
13 0
|
2月前
lanqiao OJ 1546 坐标搜寻
lanqiao OJ 1546 坐标搜寻
13 0
|
2月前
lanqiao OJ 网络寻路
lanqiao OJ 网络寻路
31 0
|
7月前
|
算法 测试技术 C#
【菲蜀定理 子序列】1250 检查「好数组」
【菲蜀定理 子序列】1250 检查「好数组」
|
C语言
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
88 0
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定