题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33804

思路:和poj的一道题有点像,不过这道题图可能不连通,因此首先求边双连通分量,然后算每个连通分量的度数,显然叶子节点的度数为1,孤立点的度数为0,然后就是统计度数了,对于孤立点ans+=2,对于叶子节点,ans++。于是最后的答案就是(ans+1)/2了。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <vector>
using namespace std;
#define MAXN 1111 int n, m, cnt, _count;
stack <int >S;
vector <vector<int > >g; int low[MAXN], dfn[MAXN], color[MAXN];
int degree[MAXN];
bool mark[MAXN];
void Tarjan(int u, int father)
{
low[u] = dfn[u] = ++ cnt;
S.push(u);
mark[u] = true;
for(int i = ; i < g[u].size(); i ++ ){
int v = g[u][i];
if(v == father)continue;
if(dfn[v] == ) {
Tarjan(v, u);
low[u] = min(low[u], low[v]);
} else if(mark[v]) {
low[u] = min(low[u], dfn[v]);
}
}
if(low[u] == dfn[u]){
int x;
_count++;
do {
x = S.top();
S.pop();
mark[x] = false;
color[x] = _count;
}while(x != u);
}
} int main()
{
int u, v, ans;
while(~scanf("%d %d", &n, &m)){
g.clear();
g.resize(n+);
while(m --){
scanf("%d %d",&u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
memset(dfn, , sizeof(dfn));
memset(mark, false, sizeof(mark));
cnt = _count = ;
for(int i = ; i <= n; i ++){
if(dfn[i] == )Tarjan(i, -);
}
if(_count == ){
puts("");
continue;
}
memset(degree, , sizeof(degree));
for(int i = ; i <= n; i++){
for(int j = ; j < g[i].size(); j++){
if(color[i] != color[g[i][j]])degree[color[g[i][j]]] ++;
}
}
ans = ;
for(int i = ; i <= _count; i++){
if(degree[i] == )ans += ; // 孤立点
else if(degree[i] == )ans ++; // 叶子节点
}
printf("%d\n", (ans + )/ );
}
return ;
}

uva 10972(边双连通分量)的更多相关文章

  1. 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)

    layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...

  2. UVA 10972 - RevolC FaeLoN(边-双连通分量)

    UVA 10972 - RevolC FaeLoN option=com_onlinejudge&Itemid=8&page=show_problem&category=547 ...

  3. UVA 10765 Doves and bombs(双连通分量)

    题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数. 对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为1:对于割顶,余下连通块个数>=2. 由于是用dfs查找双连通分量,树 ...

  4. UVA 10972 RevolC FaeLoN(边-双连通+缩点)

    很好的一道图论题,整整撸了一上午... 题意是给定一个无向图,要求将所有边变为有向边,求最少加入多少条有向边,使得该图强连通?这里先假设一个问题:给定一个无向子图,该子图具有怎样的性质才能使得将其无向 ...

  5. LA 3523 圆桌骑士(二分图染色+点双连通分量)

    https://vjudge.net/problem/UVALive-3523 题意: 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置 ...

  6. poj 2942 Knights of the Round Table(无向图的双连通分量+二分图判定)

    #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #includ ...

  7. POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]

    Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 12439   Acce ...

  8. 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分

    E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...

  9. 【BZOJ-2730】矿场搭建 Tarjan 双连通分量

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 751[Submit][Statu ...

随机推荐

  1. 调用MySql 分页存储过程带有输入输出参数

    Create PROCEDURE getuser ( IN pageIndex INT, IN pageSize INT, OUT count INT ) BEGIN )*pageSize; sele ...

  2. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  3. c#接口和抽象类对比学习

    什么是接口? 接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码. 定义了一组具有各种功能的方法.接口描述的是一种能力,具有这种能力的事物可以没任何关系.比如: public inte ...

  4. WSP (无线会话协议)

    WSP (无线会话协议) WSP是在无线应用协议(WAP:Wireless Application Protocol )组中的协议,用两种服务提供无线应用环境一个稳定的接口. 中文名 WSP WAP ...

  5. Nginx下安装PIP监控软件

    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gztar zxvf setuptools ...

  6. hibernate操作数据库例子

    1.工程目录结构如下 2.引入需要的jar包,如上图. 3.创建持久化类User对应数据库中的user表 package com.hibernate.配置文件.pojo; import java.sq ...

  7. Sed替换行和字符shell

    1.在某一行后面追加一行 RD=2000sed -i '/ssi_types/ a\limit_req zone=lreq burst='$RD';' /opt/bee.location 2.替换字符 ...

  8. [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

    示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...

  9. Unity运行时刻资源管理

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/03/2998157.html Unity运行时刻资源管理 ------------------ ...

  10. OJ 1188 全排列---康托展开

    题目描述 求n的从小到大第m个全排列(n≤20). 输入 n和m 输出 输出第m个全排列,两个数之间有一空格. 样例输入 3 2 样例输出 1 3 2 #include<cstdio> # ...