题目请戳这里

题目大意:给一张无向图,求割点数量。

题目分析:tarjan算法求割点。关于无向图割点,这里说的很清楚了。直接建图跑一遍tarjan算法即可。

详情请见代码:

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 101;
int adj[N][N];
bool flag[N][N],vis[N];
int low[N],dfn[N],subnets[N];
int n,dfns;
char s[N]; void dfs(int cur)
{
int i;
vis[cur] = true;
dfn[cur] = low[cur] = dfns ++;
for(i = 1;i <= adj[cur][0];i ++)
{
if(vis[adj[cur][i]] == false)
{
dfs(adj[cur][i]);
low[cur] = min(low[cur],low[adj[cur][i]]);
if(low[adj[cur][i]] >= dfn[cur])
subnets[cur] ++;
}
else
low[cur] = min(low[cur],dfn[adj[cur][i]]);
}
} void tarjan()
{
int i;
memset(vis,false,sizeof(vis));
memset(subnets,0,sizeof(subnets));
dfns = 1;
for(i = 1;i <= n;i ++)
if(vis[i] == false)
{
subnets[i] --;
dfs(i);
}
int ans = 0;
for(i = 1;i <= n;i ++)
if(subnets[i] > 0)
ans ++;
printf("%d\n",ans);
} int main()
{
int i,j,p;
freopen("in.txt","r",stdin);
while(scanf("%d",&n),n)
{
memset(flag,false,sizeof(flag));
memset(adj,0,sizeof(adj));
while(scanf("%d",&i),i)
{
gets(s);
p = 0;
while(s[p] && s[p] == ' ')
p ++;
while(sscanf(s + p,"%d",&j) == 1)
{
if(flag[i][j] == false)
{
flag[i][j] = flag[j][i] = true;
adj[i][++ adj[i][0]] = j;
adj[j][++ adj[j][0]] = i;
}
while(s[p] && s[p] != ' ')
p ++;
while(s[p] && s[p] == ' ')
p ++;
}
}
tarjan();
}
return 0;
}
//188K 16MS

poj1144Network(无向图割点数)的更多相关文章

  1. POJ1144 Network 无向图割点

    题目大意:求以无向图割点. 定义:在一个连通图中,如果把点v去掉,该连通图便分成了几个部分,则v是该连通图的割点. 求法:如果v是割点,如果u不是根节点,则u后接的边中存在割边(u,v),或者v-&g ...

  2. tarkjan求无向图割点模板

    #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; ; ; struct node { ...

  3. HDU4587--TWO NODES(无向图割点,暴力出奇迹)这是我见过的时间最长的题。。。

    TWO NODES Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  4. UVA315- Network(无向图割点)

    题目链接 题意: 给出一张无向图,求割点的个数 思路:非常裸的题目.直接套用模版就可以. 代码: #include <iostream> #include <cstdio> # ...

  5. Tarjan求无向图割点、桥详解

    tarjan算法--求无向图的割点和桥   一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不 ...

  6. POJ 1523 SPF (无向图割点)

    <题目链接> 题目大意: 给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量. 解题分析: Tarjan求割点模板题. #include <cs ...

  7. POJ1523 SPF[无向图割点]

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8139   Accepted: 3723 Description C ...

  8. POJ1144Network(求割点个数)

    题目链接 题意:一共n割点,然后若干行,每行第一个输入一个点,然后若干个点表示与他相连,0单独一行表示一个样例的结束.然后求图中的割点个数 割点:去掉该点之后得到的图不在连通,那么该店就是割点 一般割 ...

  9. SPF Tarjan算法求无向图割点(关节点)入门题

    SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms,  花费了大量的时间在加边上. //   time  16ms 1 ...

随机推荐

  1. Android 控件属性

    TextView 文字属性//文字左右居中android:layout_centerHorizontal="true"//文字垂直居中android:layout_centerVe ...

  2. WMI问题终极解决

    1. 如果用JInterOp,先用这篇文章叙述的: http://m.oschina.net/blog/73163 2.另外开启这个: https://dev.c-ware.de/confluence ...

  3. 自己封装的一个简易的二维表类SimpleTable

    在QT中,QTableWidget处理二维表格的功能很强大(QTableView更强大),但有时我们只想让它显示少量数据(文字和图片),这时,使用QTableWidget就有点不方便了(个人感觉).所 ...

  4. grok 正则解析日志例子<1>

    <pre name="code" class="html">下面是日志的样子 55.3.244.1 GET /index.html 15824 0. ...

  5. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

  6. #include <hash_set>

    哈希查找,不需要排序,适用于精确查找,比二分查找更快 #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream&g ...

  7. Android核心基础(五)

    1.仿网易新闻客户端 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  8. HDU2842-Chinese Rings(递推+矩阵高速幂)

    pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...

  9. string.Format组合跳转路径

    string url = this.ResolveClientUrl("~/page/bn_stu.aspx"); string str = string.Format(" ...

  10. http头部信息研究

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申明自 ...