ZJU1311 Network - 无向图的割点

2024-04-07 18:18
文章标签 network 无向 割点 zju1311

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

题目大意:

给出一个无向图,求图中割点的个数。(若去掉顶点i及其邻边,导致剩下的图不连通,则i是割点)

分析:

求割点有很成熟的DFS算法,照书写了一个,整理成模板备用。

 

  1. /*
  2. ZJU1311 Network
  3. */
  4. #include <stdio.h>
  5. #include <memory.h>
  6. #define clr(a) memset(a,0,sizeof(a))
  7. #define MIN(a,b) ((a)>(b)?(b):(a))
  8. #define N 105
  9. int n;
  10. int a[N][N];
  11. int cut[N];
  12. char* Next(char str[],char *sp){
  13.     while(*sp&&*sp!=' ') sp++;
  14.     while(*sp&&*sp==' ') sp++;
  15.     return sp;
  16. }
  17. /**************************************/
  18. int ancestor[N];
  19. int mark[N];
  20. int deep[N];
  21. int DFS(int i,int father,int dth,int b[][N],int cut[]){
  22.     int j,k,sons=0,count=0;
  23.     mark[i]=1;
  24.     deep[i]=ancestor[i]=dth;
  25.     for(k=b[i][0];k>=1;k--){
  26.         j=b[i][k];
  27.         if(j!=father && mark[j]==1) ancestor[i]=MIN(ancestor[i],deep[j]);
  28.         if(mark[j]==0){
  29.             count+=DFS(j,i,dth+1,b,cut);
  30.             sons++;
  31.             ancestor[i]=MIN(ancestor[i],ancestor[j]);
  32.             if((father==-1&&sons>1)||(father!=-1&&ancestor[j]>=deep[i]))
  33.                 cut[i]=1;
  34.             //if(ancestor[j]>deep[i]) brige[i][j]=1;
  35.         }
  36.     }
  37.     mark[i]=2;
  38.     return count+cut[i];
  39. }
  40. /*
  41. 求割点
  42.     参数:a[][]邻接矩阵,非0表示连通。n顶点个数。
  43.     返回:割点数量,cut[i]==1表示i是割点。
  44.     说明:DFS算法,先将邻接矩阵转换为邻接表,可以处理图本身不连通的情况。复杂度O(E)
  45.     可稍作修改求图的桥。 
  46. */
  47. int cutpoints(int a[][N],int n,int cut[]){
  48.     int i,j,b[N][N],count=0;
  49.     for(i=0;i<n;i++) cut[i]=b[i][0]=0;
  50.     memset(mark,0,sizeof(mark));
  51.     for(i=0;i<n;i++)for(j=0;j<n;j++) if(a[i][j]) b[i][++b[i][0]]=j;
  52.     for(i=0;i<n;i++)if(mark[i]==0) count+=DFS(0,-1,0,b,cut);
  53.     return count;
  54. }
  55. /**************************************/
  56. int main()
  57. {
  58.     int i,j,k;
  59.     char str[N*10],*sp;
  60.     
  61.     while(scanf("%d",&n)!=EOF && n){
  62.         //init
  63.         clr(a);
  64.         //input
  65.         while(scanf("%d",&i),i){
  66.             gets(str);
  67.             for(sp=Next(str,str);sscanf(sp,"%d",&j)!=EOF;sp=Next(str,sp)){
  68.                 a[i-1][j-1]=a[j-1][i-1]=1;
  69.             }
  70.         }
  71.         //work
  72.         printf("%d/n",cutpoints(a,n,cut));
  73.     }
  74.     
  75.     return 0;
  76. }

这篇关于ZJU1311 Network - 无向图的割点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

poj 2914 无向图的最小割

题意: 求无向图的最小割。 解析: 点击打开链接 代码: #pragma comment(linker, "/STACK:1677721600")#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <vector>#include <cstd

图的割点、割线问题

图的割点问题 邻接矩阵表示图 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

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络(GAN, Generative Adversarial Network)是一种深度学习模型,由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据,通过两个神经网络相互对抗,来生成以假乱真的新数据。以下是对GAN的详细阐述,包括其概念、作用、核心要点、实现过程、代码实现和适用场景。 1. 概念 GAN由两个神经网络组成:生成器(Generator)和判别器(D

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{

F12抓包05:Network接口测试(抓包篡改请求)

课程大纲         使用线上接口测试网站演示操作,浏览器F12检查工具如何进行简单的接口测试:抓包、复制请求、篡改数据、发送新请求。         测试地址:https://httpbin.org/forms/post ① 抓包:鼠标右键打开“检查”工具(F12),tab导航选择“网络”(Network),输入前3项点击提交,可看到录制的请求和返回数据。

OpenSNN推文:神经网络(Neural Network)相关论文最新推荐(九月份)(一)

基于卷积神经网络的活动识别分析系统及应用 论文链接:oalib简介:  活动识别技术在智能家居、运动评估和社交等领域得到广泛应用。本文设计了一种基于卷积神经网络的活动识别分析与应用系统,通过分析基于Android搭建的前端采所集的三向加速度传感器数据,对用户的当前活动进行识别。实验表明活动识别准确率满足了应用需求。本文基于识别的活动进行卡路里消耗计算,根据用户具体的活动、时间以及体重计算出相应活

deepcross network(DCN)算法 xdeepfm是DCN的进阶

揭秘 Deep & Cross : 如何自动构造高阶交叉特征 https://zhuanlan.zhihu.com/p/55234968 Deep & Cross Network总结 Deep和Cross不得不说的秘密 [深度模型] Deep & Cross Network (DCN) https://mp.weixin.qq.com/s/Xp_xTmcx56tJqfjMhFsArA

F12抓包04:(核心功能)Network接口抓包、定位缺陷

课程大纲 一、录制请求 ① tab导航选择“网络”(Network),即可进入网络抓包界面,进入界面默认开启录制模式,显示浏览器当前标签页的请求列表。 ② 查看请求列表,包含了当前标签页执行的所有请求和下载的资源,列表显示每条请求的相应内容。 还可以在字段行单击右键,勾选想要查看的字段。 ③ 单击列表项的“名称”,可以查看请求的详细内容。接口请