题意:

问你这个图中哪个点是割点,如果把这个点去掉会有几个子网

代码:

  1 //给你几个点,用着几个点形成了一个图。输入边形成的图,问你这个图中有多少个割点。每一个割点去掉后会形成几个强连通分量
2 //方法:
3 //你可以想用tarjan算法求出来谁是割点。然后每一个割点单独用并查集判断。用所有边(不和这个割点相连的边)通过并查集判断一下
4 //然合并后有几个区域就可以了
5 #include<stdio.h>
6 #include<string.h>
7 #include<algorithm>
8 using namespace std;
9 const int spot=1010;
10 const int edge=500010;
11 struct node
12 {
13 int u,v;
14 }m[edge];
15 struct stu
16 {
17 int to,next;
18 } a[edge];
19 int head[spot],fa,low[spot],num[spot],root,indexx,sizes,flag1,n,fx[spot],qua,len,v[spot]; //fx指祖节点
20 bool flag[spot],flag2[spot],b[spot],have[spot];
21 void init()
22 {
23 indexx=0,sizes=0,flag1=1,n=0;
24 len=qua=0;
25 memset(head,-1,sizeof(head));
26 memset(low,0,sizeof(low));
27 memset(num,0,sizeof(num));
28 memset(flag,0,sizeof(flag));
29 memset(have,0,sizeof(have));
30 }
31 void add_edge(int from,int to) //并查集
32 {
33 a[sizes].to=to;
34 a[sizes].next=head[from];
35 head[from]=sizes++;
36 a[sizes].to=from;
37 a[sizes].next=head[to];
38 head[to]=sizes++;
39 n=max(n,from);
40 n=max(n,to);
41 m[len].u=from;
42 m[len++].v=to;
43 }
44 void dfs(int cur) //求割点
45 {
46 int child=0;
47 num[cur]=++indexx;
48 low[cur]=indexx;
49 int k,v;
50 for(k=head[cur]; k+1; k=a[k].next)
51 {
52 v=a[k].to;
53 if(!num[v])
54 {
55 dfs(v);
56 low[cur]=min(low[cur],low[v]);
57 if(low[v]>=num[cur])
58 {
59 child++;
60 if(cur!=fa || child>1) flag[cur]=1,qua++;
61 }
62 }
63 else
64 low[cur]=min(low[cur],num[v]);
65 }
66 }
67 int finds(int x)
68 {
69 if(x!=v[x])
70 {
71 int y=finds(v[x]);
72 return v[x]=y;
73 }
74 return x;
75 }
76 int panduan(int x)
77 {
78 for(int i=1;i<=n;++i)
79 {
80 if(have[i]) v[i]=i;
81 }
82 for(int i=0;i<len;++i)
83 {
84 if(m[i].u!=x && m[i].v!=x)
85 {
86 int fx=finds(m[i].u);
87 int fy=finds(m[i].v);
88 if(fx!=fy) v[fx]=fy;
89 }
90 }
91 int ans=0;
92 for(int i=1;i<=n;++i)
93 {
94 if(i!=x && v[i]==i) ++ans;
95 }
96 return ans;
97 }
98 int main()
99 {
100 int x,y,i,ss=0,ans,j;
101 while(scanf("%d",&x)&&x)
102 {
103 init();
104 scanf("%d",&y);
105 root=x;
106 have[x]=1;
107 have[y]=1;
108 add_edge(x,y);
109 for(;;)
110 {
111 scanf("%d",&x);
112 if(!x) break;
113 scanf("%d",&y);
114 add_edge(x,y);
115 have[x]=1,have[y]=1;
116 }
117 fa=root;
118 dfs(root);
119 printf("Network #%d\n",++ss);
120 for(i=1; i<=n; i++)
121 {
122 if(flag[i])
123 {
124 flag1=0;
125 int q=panduan(i);
126 printf(" SPF node %d leaves %d subnets\n",i,q);
127 }
128 }
129 if(flag1)
130 printf(" No SPF nodes\n");
131 printf("\n");
132 }
133 return 0;
134 }

SPF POJ - 1523 割点+并查集的更多相关文章

  1. Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题

    Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...

  2. poj 2524 (并查集)

    http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通 ...

  3. [POJ 2588]--Snakes(并查集)

    题目链接:http://poj.org/problem?id=2588 Snakes Time Limit: 1000MS   Memory Limit: 65536K   Description B ...

  4. poj 1456 Supermarket - 并查集 - 贪心

    题目传送门 传送点I 传送点II 题目大意 有$n$个商品可以销售.每个商品销售会获得一个利润,但也有一个时间限制.每个商品需要1天的时间销售,一天也只能销售一件商品.问最大获利. 考虑将出售每个物品 ...

  5. poj 2492(关系并查集) 同性恋

    题目;http://poj.org/problem?id=2492 卧槽很前卫的题意啊,感觉节操都碎了, t组测试数据,然后n,m,n条虫子,然后m行,每行两个数代表a和b有性行为(默认既然能这样就代 ...

  6. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

  7. Poj(1182),种类并查集

    题目链接:http://poj.org/problem?id=1182 再次熟练种类并查集,又积累点经验,和技巧,rank 0 2 1 先计算father[x] ,再更新rank[x]; #inclu ...

  8. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  9. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

随机推荐

  1. Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace

    现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...

  2. windows鼠标右键添加快捷方式

    [win]+[R] 输入regedit 打开路径:计算机\HKEY_CLASSES_ROOT\DesktopBackground\Shell 创建应用文件,这里以putty为例 右键 Shell 新建 ...

  3. 解决Tengine健康检查引起的TIME_WAIT堆积问题

    简介: 解决Tengine健康检查引起的TIME_WAIT堆积问题 一. 问题背景 "服务上云后,我们的TCP端口基本上都处于TIME_WAIT的状态"."这个问题在线下 ...

  4. alter column和modify column

    5.6中,发现其实alter column 和更改modify column 步骤是一样的 mysql> create table xs(name varchar(12),age int def ...

  5. rac双节点+物理DG

    注:以下文章均是看了黄伟老师的视频,记录为博客供以后使用. 双节点RAC搭建: http://blog.csdn.net/imliuqun123/article/details/76171289 RA ...

  6. kubernets之secret资源

    一  对于一些保密度比较高的文件,k8s又是如何存储的呢? 针对那些保密度比较高的配置文件,例如证书以及一些认证配置不能直接存储在configmap中,而是需要存储在另外一种资源中,需要对存储在里面的 ...

  7. Flask+pin

    Flask+SSTI的新火花 记一次buu刷题记和回顾祥云杯被虐出屎的经历.题目:[GYCTF2020]FlaskApp 一 题目初见 朴实无华的页面,一个base64的小程序页面 看到有提示. 我就 ...

  8. python中hmac模块的使用

    hmac(hex-based message authentication code)算法在计算哈希的过程中混入了key(实际上就是加盐),和hashlib模块中的普通加密算法相比,它能够防止密码被撞 ...

  9. USB充电限流芯片,输出短路关闭,过压关闭

    PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄型SOT2 ...

  10. Django中多表关联的展示问题:

    增加一个知识点,当表中有多对多关联时,在前端展示的时候是一个列表,所以在展示的时候需要这样做: 表结构: class ProjectEnv(models.Model): project = model ...