割点的距离分层解法

2023-11-02 04:18
文章标签 距离 分层 解法 割点

本文主要是介绍割点的距离分层解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

割点定义

  • 在图中去掉该点使图变为非连通图的点叫做割点
  • 割点可以将图分为易于分开处理并且易于合并问题的子图

平面图的距离分层

  • 在平面图中将所有点按距一个点的距离进行分层可以高效的处理割点

性质

  • 令平面图中距源点距离为x的点的层数为x
  • 在平面图中,层数为x的点只能由层数为x-1的点到达
  • 若某个层数只有一个点,且图为连通图,那么该点一定为该图的割点
    Problem
    Codeforces583D判断平面图路径上是否有割点
    传送门
    先正反dfs求出路径上可行点,然后判断可行点中有无割点
    代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=2000000+10;
vector<char>A[maxn];
vector<int>vis1[maxn];
vector<int>vis2[maxn];
int n,m;
int X[4]={0,1,0,-1};
int Y[4]={1,0,-1,0};
int cnt[maxn];
inline void floodfill(int x,int y){if(x<0||x>=n||y<0||y>=m)return ;if(vis1[x][y]||A[x][y]=='#')return ;vis1[x][y]++;if(x==n-1&&y==m-1)return;for(int i=0;i<2;i++)floodfill(x+X[i],y+Y[i]);
}
inline void fillflood(int x,int y){if(x<0||x>=n||y<0||y>=m)return ;if(vis2[x][y]||A[x][y]=='#')return ;vis2[x][y]++;if(x==0&&y==0)return;for(int i=2;i<4;i++)fillflood(x+X[i],y+Y[i]);
}
inline void gn(char &x){x=getchar();while(x!='.'&&x!='#')x=getchar();
}
int main(){//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);scanf("%d %d",&n,&m);char x;for(int i=0;i<n;i++){for(int j=0;j<m;j++){gn(x);A[i].push_back(x);}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){vis1[i].push_back(0);vis2[i].push_back(0);}}floodfill(0,0);fillflood(n-1,m-1);for(int i=0;i<n;i++){for(int j=0;j<m;j++)if(vis1[i][j]&&vis2[i][j])cnt[i+j]++;}if(!vis1[n-1][m-1]){puts("0");return 0;}for(int i=1;i<n+m-2;i++){if(cnt[i]==1){puts("1");return 0;}}puts("2");
return 0;
}

这篇关于割点的距离分层解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328049

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

图的割点、割线问题

图的割点问题 邻接矩阵表示图 package com.hyl.algorithm.other;import java.util.Arrays;import com.hyl.algorithm.search.base.SearchIntf;import com.hyl.algorithm.search.base.SearchIntfFactory;/*** 寻找图的割点* <p>** @aut

JavaEE应用的分层模型

不管是经典的JAVAEE架构,还是轻量级JavaEE架构,大致上都可以分为如下几层: 1、Domain Object(领域对象)层:此层由一系列的POJO(Plain Old Java Object)组成,这些对象是该系统的Domain Object,往往包含了各自所需实现的业务逻辑方法。 2、DAO(Data Access Object,数据访问对象)层:此层由一系列的DAO组件组成,这些D

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

模拟退火求n个点到某点距离和最短

/*找出一个点使得这个店到n个点的最长距离最短,即求最小覆盖圆的半径用一个点往各个方向扩展,如果结果更优,则继续以当前步长扩展,否则缩小步长*/#include<stdio.h>#include<math.h>#include<string.h>const double pi = acos(-1.0);struct point {double x,y;}p[1010];int

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS