POJ---1144 电话网络

简介: POJ---1144 电话网络

POJ—1144 电话网络

题目描述

20210312220934138.png

输入输出

20210312221037558.png

输入样例

5
5 1 2 3 4
0
6
2 1 3
5 4 6 2
0
0

输出样例

1
2


题意分析

题中的电话交换机就是图中的点,线路双向说明是个无向图.题中至关重要的点也就是图中的割点,一旦出现了问题影响的点也就会有许多个.所以这个题主要是求割点的个数.直接上Tarjan算法,注意输入格式的控制比较特殊.

参考代码


#include<iostream>
#include<set>
#include<string.h>
using namespace std;
const int maxn  = 100 + 10;
int head[maxn],cnt,root;
set<int> s;
struct edge{
  int to,next;
}e[maxn*maxn];
int low[maxn],dfn[maxn],num;
void add(int u,int v){
  e[++cnt].next = head[u];
  e[cnt].to = v;
  head[u] = cnt;
}
void tarjan(int u,int fa){
  dfn[u] = low[u]=++num;
  int count  = 0;
  for(int i = head[u]; i;i=e[i].next){
    int v = e[i].to;
    if(fa==v){
      continue;
    }
    if(!dfn[v]){
      tarjan(v,u);
      low[u] = min(low[u],low[v]);
      if(low[v]>=dfn[u]){
        count++;
        if(u!=root || count > 1){
          s.insert(u);//这里不能使用一个变量做统计,因为可能会出现判断重复的情况,可以使用一个结合,把成立的点加进去,最后统计集合大小即可. 
        }
      }
    }else{
      low[u] = min(low[u],low[v]);
    }
  }
}
void init(){
  memset(head,0,sizeof(head));
  memset(low,0,sizeof(low));
  memset(dfn,0,sizeof(dfn));
  cnt = num  = 0;
  s.clear();
}
int main()
{
  int n,u,v;
  while(cin>>n&&n){//控制每个case 
    init();
    while(cin>>u&&u){
      while(1){
        char ch = getchar();
        if(ch=='\n'){
          break;
        }
        cin>>v;
        add(u,v);
        add(v,u);
      } 
    }
    for(int i = 1; i <= n; i++){
      if(!dfn[i]){
        root = i;
        tarjan(i,0);
      }
    }
    cout<<s.size()<<endl;
  }
  return 0;
}


相关文章
技术宅之---用手机实现“移动网关”
本文假定读者已知道内网穿透相关认知。 或许你用过花生壳、frp、ngrok、teamviewer等穿透工具,今天要给大家介绍的是smarGate(https://github.com/lazy-luo/smarGate) 1、samrGate是什么? 官方命名为“移动网关”,通过手机客户端将位于内网的服务端网络进行按需暴露。
3632 0
|
5月前
|
算法 C++
【洛谷 P1055】[NOIP2008 普及组] ISBN 号码 题解(字符串)
该编程题目要求编写程序检查输入的ISBN号码的识别码是否正确。ISBN号码格式为`x-xxx-xxxxx-x`,其中`x`是数字,最后一位是通过特定算法计算得出的识别码。算法是将前9位数字乘以1到9的加权值,求和后对11取模,模为10时识别码为大写`X`,否则为对应模值的数字。程序接收一个符合格式的ISBN号码,验证识别码并输出`Right`(如果正确)或修正后的正确ISBN号码。提供的AC代码使用C++实现这一功能。
58 0
|
5月前
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
97 0
|
6月前
蓝桥杯vip试题 报时助手
蓝桥杯vip试题 报时助手
44 0
|
定位技术 C++
洛谷P1600 [NOIP2016 提高组] 天天爱跑步
洛谷P1600 [NOIP2016 提高组] 天天爱跑步
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
每日一题 --- 2055. 蜡烛之间的盘子[力扣][Go]
每日一题 --- 2055. 蜡烛之间的盘子[力扣][Go]
每日一题 --- 2055. 蜡烛之间的盘子[力扣][Go]
(字符串hash)(map)电话聊天狂人
(字符串hash)(map)电话聊天狂人
67 0
|
数据安全/隐私保护
PTA 1076 Wifi密码 (15 分)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。
203 0