求了一天的割点
来源:互联网 发布:sql去重复列名 编辑:程序博客网 时间:2024/05/17 08:10
这是POJ的1144.
一个电话线公司(简称TLC)正在建立一个新的电话线缆网络。他们连接了若干个地点分别从1到N编号。没有两个地点有相同的号码。这些线是双向的并且能使两个地点保持通讯。每个地点的线都终结于电话交换机。每个地点都有一个电话交换机。从每个地点都能通过线缆到达其他任意的地点,然而它并不需要直接连接,它可以通过若干个交换机来到达目的地。有时候某个地点供电出问题时,交换机就会停止工作。TLC的工作人员意识到,除非这个地点是不可达的,否则这种情况就会发生,它还会导致一些其它的地点不能互相通讯。在这种情况下我们会称这个地点(错误发生的地方)为critical。现在工作人员想要写一个程序找到所有critical地点的数量。帮帮他们。
输入
输入文件包括若组测试数据。每一组是一个网络,每一组测试数据的第一行是地点的总数量N<100.每个接下来最多N行包括一个数字表示一个地点和与它相连接的地点的数字。这些最多N行完全描述了整个网络,比如,网络中每个直接连接的两个地点被至少一行包括。一行内的所有数字都要用空格隔开。每组数据需要用单独的一个0结束。最后的块只有一行即N=0。
输出
输出除了最后一个组其他每一个组的critical地点的数量,每个块用一行输出。
样例输入:
5
5 1 2 3 4
0
6
2 1 3
5 4 6 2
0
0
样例输出
1
2
这道题首先从输入看就很恼火,但并不是完全没头绪,题目中提到有若干组数据,便在最外层来个while,因为以0结尾,所以条件即为n!=0,而每组数据也是以0结束,(假设数据的第一个数字为x,后面的数字为y)则第二层x的while条件为x!=0,输入0前又换了一行,那么可以用字符,只要不为'\n'则继续输入。
while(scanf("%d",&n)&&n!=0)
while(scanf("%d",&x)&&x!=0)
while(getchar()!='\n')
另外,由于有若干组数据,所以在第二层whlie内要把开的数组还有定义的要变的变量全部重新赋一遍初值。
用图的存储存好数据,dfn记录到达时间,开个数组标记割点(当前点为树根,且有两个以上的子节点即为割点)。
dfn[u]=low[u]=index;
index++;
for(int i=first[u];i!=0;i=arc[i].next)
{
v=arc[i].data;
if(!dfn[v])
{
tarjan(v);
if(u==root) num++;
low[u]=min(low[u],low[v]);
if(u==root&&num>=2) flag[u]=1;
if(u!=root&&low[v]>=dfn[u]) flag[u]=1;
}
else
low[u]=min(low[u],dfn[v]);
最后,很重要的一点,全局变量定义很方便但也有危险。。递归时不能用全局变量记录值的。。
- 求了一天的割点
- 求图的割点
- 求连通图的割点
- POJ1144-求图的割点(裸)
- 求一个连通图的割点
- poj1523SPF(求图的割点)
- poj1144 求图的割点
- poj 1144求图的割点
- poj1144 求图的割点--模板
- 求连通图的割点(网易有道)
- poj 1523 求图的割点
- poj 1144 求图的割点
- 39 求一个有向连通图的割点
- 求无向图的割点和桥
- 求无向连通图的割点
- 求无向连通图的割点
- 求无向联通图的割点
- 求连通图的割点(关节点)问题
- HDU1216
- C语言_简单链表(beta版)_Cplus17.2
- HDOJ-----1084结构体排序
- 浏览器内核比较
- SODBASE运维----Linux下SODBASE CEP集群命令
- 求了一天的割点
- django 使用mysql 出现的 No module named MySQLdb
- Delphi-将ListView内容导出到文件
- 五大常用算法之三:贪心算法
- HDU1873
- 杂物
- [安卓学习小记]You need to use a Theme.AppCompat theme (or descendant) with this activity.
- 编号 枚举
- android和java中对线程的使用总结