POJ1523 SPF 单点故障

POJ1523

 

题意很简单,求删除割点后原先割点所在的无向连通图被分成了几个连通部分(原题说prevent at least one pair of available nodes from being able to communicate on what was previously a fully connected network,阻止至少一对可用节点能够在先前完全连接的网络上进行通信,所以输入的图不保证连通)

对于每个割点

  1. 如果它是根节点,则答案=DFS树的子树数量
  2. 如果它是非根节点,则答案=孩子low值>=当前结点的dfn值的孩子数

注意要扫描所有的点从未访问的点开始DFS!

还有多组数据记得清空数组!

代码如下(我绝对不会告诉你们我因为写错了输出格式而调了一上午)

 

 1 #include<cstdio>
 2 #include<cctype>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 #define re register int
 7 struct edge
 8 {
 9     int to,pre;
10 }edges[499501];//邻接表 
11 int head[1001],tot,dfn[1001],dfs_clock;
12 int ans[1001];//删去结点i后连通分量的个数 
13 int read()
14 {
15     int f=0,x=0;
16     char c=getchar();
17     while(!isdigit(c))
18     {
19         f=f|c=='-';
20         c=getchar();
21     }
22     while(isdigit(c))
23     {
24         x=(x<<1)+(x<<3)+(c^48);
25         c=getchar();
26     }
27     return x;
28 }
29 void add(int x,int y)
30 {
31     edges[++tot].to=y;
32     edges[tot].pre=head[x];
33     head[x]=tot;
34 }
35 int tarjan(int u,int fa)
36 {
37     int lowu=dfn[u]=++dfs_clock,child=0;
38     ans[u]=1;
39     for(re i=head[u];i;i=edges[i].pre)
40         if(!dfn[edges[i].to])
41         {
42             child++;
43             int lowv=tarjan(edges[i].to,u);
44             lowu=min(lowu,lowv);
45             if(lowv>=dfn[u])//有一个孩子满足,连通分量+1 
46                 ans[u]++;
47         }
48         else if(edges[i].to!=fa)
49             lowu=min(lowu,dfn[edges[i].to]);
50     if(u==fa)//根节点删去后连通分量数=子树个数 
51         ans[u]=child;
52     return lowu;
53 }
54 int main()
55 {
56     int t=0,x,y;
57     while(x=read())
58     {
59         memset(edges+1,0,499500<<3),memset(head+1,0,1000<<2),memset(dfn+1,0,1000<<2);
60         tot=dfs_clock=0;
61         t++;
62         y=read();
63         int n=max(x,y);
64         add(x,y),add(y,x);
65         while(x=read())
66         {
67             y=read();
68             n=max(max(x,y),n);
69             add(x,y),add(y,x);
70         }
71         tarjan(1,1);
72         printf("Network #%d\n",t);
73         int pd=0;
74         for(re i=1;i<=n;i++)
75             if(ans[i]>1)
76             {
77                 pd=1;
78                 printf("  SPF node %d leaves %d subnets\n",i,ans[i]);
79             }
80         if(!pd)
81             printf("  No SPF nodes\n");
82         printf("\n");
83     }
84     return 0;
85 }
SPF 单点故障

 

转载于:https://www.cnblogs.com/LiHaozhe/p/9524721.html

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值