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;
}


相关文章
|
5月前
|
算法 C++
【洛谷 P1055】[NOIP2008 普及组] ISBN 号码 题解(字符串)
该编程题目要求编写程序检查输入的ISBN号码的识别码是否正确。ISBN号码格式为`x-xxx-xxxxx-x`,其中`x`是数字,最后一位是通过特定算法计算得出的识别码。算法是将前9位数字乘以1到9的加权值,求和后对11取模,模为10时识别码为大写`X`,否则为对应模值的数字。程序接收一个符合格式的ISBN号码,验证识别码并输出`Right`(如果正确)或修正后的正确ISBN号码。提供的AC代码使用C++实现这一功能。
65 0
|
5月前
|
C++
【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
**扫雷游戏NOIP2015普及组题目:**在$n\times m$的雷区,玩家需避开地雷格(*),翻开非地雷格(?)显示周围地雷数。给定雷区布局,输出每个格子的地雷数或保持*不变。输入含雷区大小及布局,输出相应格式。样例输入/输出展示具体规则。100%数据$n,m\leq100$。程序思路:检查邻接8格,AC代码用C++实现。
37 0
|
6月前
蓝桥杯vip试题 报时助手
蓝桥杯vip试题 报时助手
44 0
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
|
数据安全/隐私保护
【NOI】题目: 潜伏者(9分原因)
【NOI】题目: 潜伏者(9分原因)
253 0
【NOI】题目: 潜伏者(9分原因)
|
数据安全/隐私保护
PTA 1076 Wifi密码 (15 分)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。
204 0
每日一题 --- P1093 [NOIP2007 普及组] 奖学金[洛谷][JAVA]
每日一题 --- P1093 [NOIP2007 普及组] 奖学金[洛谷][JAVA]