LOJ10100
原题来自:CEOI 1996
一个电话线公司(简称 TLC)正在建立一个新的电话线缆网络,他们连接了若干个地点,编号分别从 1 到 N,没有两个地点有相同的号码,这些线是双向的并且能使两个地点保持通讯,每个地点的线都终结于电话交换机。每个地点都有一个电话交换机。从每个地点都能通过线缆到达其他任意的地点,然而它并不需要直接连接,它可以通过若干个交换机来到达目的地。
有时候某个地点供电出问题时,交换机就会停止工作。TLC 的工作人员意识到,除非这个地点是不可达的,否则这种情况就会发生,它还会导致一些其它的地点不能互相通讯。在这种情况下我们会称这个地点(错误发生的地方)为灾区。现在工作人员想要写一个程序统计所有灾区的数量。帮帮他们。
输入格式
输入文件包括若干组测试数据。
每一组是一个网络,每一组测试数据的第一行是地点的总数量 N。每组接下来最多有 N 行包括一个数字表示一个地点和与它相连接的地点的数字。最多 N 行可以完全描述整个网络,比如,网络中每个直接连接的两个地点被至少一行包括。一行内的所有数字都要用空格隔开。每组数据需要用单独的一个 0 结束。最后的块只有一行即 N=0。
输出格式
输出除了最后一组,其他每一组的灾区的数量,每个块用一行输出。
样例
样例输入
5
5 1 2 3 4
0
6
2 1 3
5 4 6 2
0
0
样例输出
1
2
数据范围与提示
___________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=105;
4 int n;
5 struct edge
6 {
7 int u,v,nxt;
8 }e[maxn*maxn];
9 int head[maxn],js;
10 void addage(int u,int v)
11 {
12 e[++js].u=u;e[js].v=v;
13 e[js].nxt=head[u];head[u]=js;
14 }
15 int low[maxn],dfn[maxn],cnt,st[maxn],top,lts;
16 bool cut[maxn];
17 vector<int>lt[maxn];
18 void tarjan(int u,int rt)
19 {
20 low[u]=dfn[u]=++cnt;
21 st[++top]=u;
22 int ct=0;
23 for(int i=head[u];i;i=e[i].nxt)
24 {
25 int v=e[i].v;
26 if(!dfn[v])
27 {
28 ct++;
29 tarjan(v,rt);
30 low[u]=min(low[u],low[v]);
31 if((ct>1 && u==rt)||(u!=rt && low[v]>=dfn[u]))cut[u]=1;
32 /*
33 if(low[v]>=dfn[u])
34 {
35 lts++;
36 lt[lts].clear();
37 while(st[top]!=u)lt[lts].push_back(st[top--]);
38 lt[lts].push_back(u);
39 }
40 */
41 }
42 else low[u]=min(low[u],dfn[v]);
43 }
44 }
45 void init()
46 {
47 memset(head,0,sizeof head);
48 js=0;
49 memset(low,0,sizeof low);
50 memset(dfn,0,sizeof dfn);
51 cnt=0;
52 top=0;
53 lts=0;
54 memset(cut,0,sizeof cut);
55
56 }
57 int main()
58 {
59 while(scanf("%d",&n),n)
60 {
61 init();
62 int u,v;
63 while(scanf("%d",&u),u)
64 {
65 while(1)
66 {
67 scanf("%d",&v);
68 addage(u,v);addage(v,u);
69 char c=getchar();
70 if(c=='\n')break;
71 }
72 }
73 for(int i=1;i<=n;++i)
74 if(!dfn[i])tarjan(i,i);
75 int jss=0;
76 for(int i=1;i<=n;++i)if(cut[i])jss++;
77 printf("%d\n",jss);
78 }
79 return 0;
80 }
LOJ10100的更多相关文章
- LOJ-10100(割点个数)
题目链接:传送门 思路: 就是求割点的个数,直接Tarjan算法就行. 注意输入格式(判断比较水). #include<iostream> #include<cstdio> # ...
- loj10100 网络
这个题目描述好难理解呀qwq... 传送门 分析 在读懂题之后我们不难发现这道题实际就是在求一张图中有多少个割点.只需要注意读入方式即可. 代码 #include<iostream> #i ...
随机推荐
- 手写简易版RPC框架基于Socket
什么是RPC框架? RPC就是远程调用过程,实现各个服务间的通信,像调用本地服务一样. RPC有什么优点? - 提高服务的拓展性,解耦.- 开发人员可以针对模块开发,互不影响.- 提升系统的可维护性及 ...
- input输入框输入中文时,监听的input事件 屏蔽拼音状态
$(function () { $('#jh').off().on({ //中文输入开始 compositionstart: function () { cpLock = false; }, //中文 ...
- GraduateDesign-初试APP编写(去除虚拟按键和禁止状态栏下拉)
为了毕设的要求,需要在Android系统上运行一个app来控制硬件,今天开始这个app的编写. 首先,我们的系统将只运行这个app,也就是我们不需要状态栏,虚拟按键等. 故这里将app设置为全屏模式. ...
- java零基础之---常见java面试题
看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...
- 图像处理 jpg png gif svg
jpg 图像格式 高压缩的,除了文字,线条外,用jpg 处理 GIF 图像格式 高压缩的,动图 PNG 图像格式 PNG是一种可携式网络图像格式.PNG一开始便结合GIF及JPG两家之长,打算一举取 ...
- MySQL中的这个池子,强的一批!
Mysql 中数据是要落盘的,这点大家都知道.读写磁盘速度是很慢的,尤其和内存比起来更是没的说.但是,我们平时在执行 SQL 时,无论写操作还是读操作都能很快得到结果,并没有预想中的那么慢. 可能你会 ...
- unity 卡牌聚拢算法
unity 卡牌聚拢算法 前言 代码 前言 笔者在做项目时遇到了一个要聚拢手牌,像三国杀里的手牌聚拢的效果 大概效果图: 代码 public Dictionary<int, int> le ...
- 用python做youtube自动化下载器 代码
目录 项目地址 思路 流程 1. post i. 先把post中的headers格式化 ii.然后把参数也格式化 iii. 最后再执行requests库的post请求 iv. 封装成一个函数 2. 调 ...
- Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载
hello,大家好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...
- Python+MySQL随机试卷及答案生成程序
一.背景 本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样. 二.准备工作 1.安装Python3 下载地址:https://www.python.org/ ...