(连通图 模板题 无向图求割点)Network --UVA--315(POJ--1144)
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=251
http://poj.org/problem?id=1144
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82833#problem/B
首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第一个数字代表后面的都和它存在边,0表示行输入的结束
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define maxn 10005 int dfn[maxn];///代表最先遍历到这个点的时间
int low[maxn];///这个点所能到达之前最早的时间点
int Father[maxn];///保存这个节点的父亲节点
int n, m, Time, top;///Time 时间点, top用于栈操作
vector<vector<int> > G; void Init()
{
G.clear();
G.resize(n+);
memset(low, , sizeof(low));
memset(dfn, , sizeof(dfn));
memset(Father, , sizeof(Father));
Time = ;
} void Tarjan(int u,int fa)
{
low[u] = dfn[u] = ++Time;
Father[u] = fa;
int len = G[u].size(), v; for(int i=; i<len; i++)
{
v = G[u][i]; if(!dfn[v])
{
Tarjan(v, u);
low[u] = min(low[u], low[v]);
}
else if(fa != v)///假如我们在这里写上了 low[u] = min(low[v], low[u]),那么就相当于我们由v回到了v之前的节点
low[u] = min(dfn[v], low[u]);
}
}
void solve()
{/**
求割点
一个顶点u是割点,当且仅当满足(1)或(2)
(1) u为树根,且u有多于一个子树。
(2) u不为树根,且满足存在(u,v)为树枝边(或称 父子边,即u为v在搜索树中的父亲),使得 dfn(u)<=low(v)。
(也就是说 V 没办法绕过 u 点到达比 u dfn要小的点)
注:这里所说的树是指,DFS下的搜索树*/
int RootSon = , ans = ;///根节点儿子的数量
bool Cut[maxn] = {false};///标记数组,判断这个点是否是割点 Tarjan(,); for(int i=; i<=n; i++)
{
int v = Father[i];
if(v == )///也是就说 i的父亲是根节点
RootSon ++;
else if(dfn[v] <= low[i])
Cut[v] = true;
} for(int i=; i<=n; i++)
{
if(Cut[i])
ans ++;
}
if(RootSon > )
ans++; printf("%d\n", ans);
}
int main()
{
while(scanf("%d", &n), n)
{
int a, b;
char ch;
Init();
while(scanf("%d", &a), a)
{
while(scanf("%d%c",&b,&ch))
{
G[a].push_back(b);
G[b].push_back(a);
if(ch == '\n')
break;
}
}
solve();
}
return ;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std; #define N 105 struct Edage
{
int v, next;
} e[N*N]; int n, m, Index, ans;
int low[N], dfn[N], father[N], Head[N]; void Init()
{
ans = Index = ;
memset(low, , sizeof(low));
memset(dfn, , sizeof(dfn));
memset(father, , sizeof(father));
memset(Head, -, sizeof(Head));
}
void Add(int u, int v)
{
e[ans].v = v;
e[ans].next = Head[u];
Head[u] = ans++;
}
void Tarjan(int u, int fa)
{
int v;
low[u] = dfn[u] = ++Index;
father[u] = fa; for(int j=Head[u]; j!=-; j=e[j].next)
{
v = e[j].v;
if(!dfn[v])
{
Tarjan(v, u);
low[u] = min(low[u], low[v]);
}
else if(v!=fa)
low[u] = min(low[u], dfn[v]);
}
} void Slove()
{
int sum=, bnt=;
bool Cut[N]= {false}; Tarjan(, ); for(int i=; i<=n; i++)
{
int v = father[i];
if(v==)
sum++;
else if(dfn[v]<=low[i])
Cut[v] = true;
} for(int i=; i<=n; i++)
{
if(Cut[i])
bnt ++;
} if(sum>)
bnt ++; printf("%d\n", bnt);
} int main()
{
while(scanf("%d", &n), n)
{
int u, v;
char ch; Init();
while(scanf("%d", &u), u)
{
while()
{
scanf("%d%c", &v, &ch);
Add(u, v);
Add(v, u);
if(ch=='\n')
break;
}
} Slove();
}
return ;
}
(连通图 模板题 无向图求割点)Network --UVA--315(POJ--1144)的更多相关文章
- (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 315 Network (模板题)(无向图求割点)
<题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根 ...
- uva 315 Network(无向图求割点)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 无向图求割点 UVA 315 Network
输入数据处理正确其余的就是套强联通的模板了 #include <iostream> #include <cstdlib> #include <cstdio> #in ...
- B - Network - uva 315(求割点)
题意:给一个无向连通图,求出割点的数量. 首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第一个数字代表后面的都和它存在边,0表示行输入的结束(很蛋疼的输入方式). 分析:割点的模板题 ...
- poj 1144 Network 无向图求割点
Network Description A Telephone Line Company (TLC) is establishing a new telephone cable network. Th ...
- 连通分量模板:tarjan: 求割点 && 桥 && 缩点 && 强连通分量 && 双连通分量 && LCA(近期公共祖先)
PS:摘自一不知名的来自大神. 1.割点:若删掉某点后.原连通图分裂为多个子图.则称该点为割点. 2.割点集合:在一个无向连通图中,假设有一个顶点集合,删除这个顶点集合,以及这个集合中全部顶点相关联的 ...
- 2013 ACM/ICPC南京邀请赛B题(求割点扩展)
题目链接:http://icpc.njust.edu.cn/Contest/194/Problem/B B - TWO NODES 时间限制: 10000 MS 内存限制: 65535 KB 问题描述 ...
- B - Network---UVA 315(无向图求割点)
A Telephone Line Company (TLC) is establishing a new telephone cable network. They are connectin ...
随机推荐
- DateUtil日期处理
package com.zjx.util; import java.text.SimpleDateFormat; import java.util.Date; public class DateUti ...
- css 设置元素背景为透明
要设置某一元素的背景为透明,在 chrome .firefox.opera 下是这样的: rgba 中的最后一个参数 0.4 就是想要的透明度,范围在0-1之间. 在 ie 中一般是这样的: filt ...
- Linux就业技术指导(三):IDC机房解密
1.1 IDC机房 1.1.1 带宽计算 带宽流量计算公式: 1 Byte=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB B表示Byte,工业标准是1000. 一般我们家装 ...
- PR数量回写重复
- css3文字截断
width:200px; height:14px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; text-overflow ...
- Repeater嵌套Repeater
<asp:Repeater ID="rptXiaoLei" runat="server" OnItemDataBound="rptXiaoLei ...
- swift - 画图 - 画矩形,虚线,圆和半圆
import UIKit class JYJYBouncedCouponsViewCellBgView: UIView { //一定要在这里设置 背景色, 不要再draw里面设置, override ...
- Algorithmic Trading[z]
Algorithmic Trading has been a hot topic for equity/derivative trading over a decade. Many ibanks an ...
- 测试rar/bz2/tar.gz/gz压缩文档完整性
#gz文件gzip -t *.gz#bz2文件tar jtvf archive.tar.bz2#tar.gz文件tar jtvf archive.tar.gz#rar文件unrar t 1.rar
- This page contains the following error
解决办法:将header头注释掉 header("content-type:text/xml; charset=UTF-8");