(连通图 ) Redundant Paths --POJ --3177
链接:
http://poj.org/problem?id=3177
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82833#problem/E
要去重边, 求再加上几条边任意两点直接都能到达
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std; #define N 100005 struct Edage
{
int v, next;
} e[N<<]; int n, Index, bnt, cnt, top;
int low[N], dfn[N], Head[N], Stack[N], belong[N], ru[N];
bool use[][]; void Init()
{
Index = bnt = top = ;
memset(low, , sizeof(low));
memset(dfn, , sizeof(dfn));
memset(Head, -, sizeof(Head));
memset(use, , sizeof(use));
memset(belong, , sizeof(belong));
memset(ru, , sizeof(ru));
}
void Add(int u, int v)
{
e[bnt].v = v;
e[bnt].next = Head[u];
Head[u] = bnt++;
}
void Tarjan(int u, int fa)
{
int v;
low[u] = dfn[u] = ++Index;
Stack[++top] = u; 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]);
} if(low[u]==dfn[u])
{
cnt++;
do
{
v = Stack[top--];
belong[v] = cnt;
}while(u!=v);
}
} int main()
{
int m;
while(scanf("%d%d", &n, &m)!=EOF)
{
int i, j, u, v; Init();
for(i=; i<m; i++)
{
scanf("%d%d", &u, &v); if(use[u][v]==false)
{
Add(u, v);
Add(v, u);
use[u][v] = use[v][u] = true;
} } Tarjan(, ); for(i=; i<=n; i++)
for(j=Head[i]; j!=-; j=e[j].next)
{
if(belong[i]!=belong[e[j].v])
ru[belong[i]]++;
} int ans=; for(i=; i<=cnt; i++)
{
if(ru[i]==)
ans++;
} printf("%d\n", (ans+)>>);
}
return ;
}
又看了一遍连通图, 把之前的题都看了一遍,虽然现在该学匹配了,我却还在这下功夫,但这是有点作用的,下次再复习一下估计理解就更好了
(连通图 ) Redundant Paths --POJ --3177的更多相关文章
- Redundant Paths POJ - 3177 把原图变成边—双连通图
无向图概念:(这里的x->y表示x和y之间有一条无向边)1.桥:对于一个无向图,如果删除某条边后,该图的连通分量增加,则称这条边为桥 比如1->2->3->4这样一个简单得图一 ...
- E - Redundant Paths - poj 3177(缩点求叶子节点)
题意:给一个图,想让每两个点之间都有两条路相连,不过特殊的是相同的两点之间多次相连被认为是一条边,现在求最少还需要添加几条边才能做到 分析:手欠没看清楚是相同的边只能相连一次,需要去重边,缩点后求出来 ...
- Redundant Paths POJ - 3177(边—双连通分量)
题意: 在图中加边 看最少能通过加多少条边把 图变成边—双连通分量 解析: 先做一次dfs,不同的连通分量的low是不同的 注意重边 缩点 统计度为1的点 那么需要加的边为(ret+1)/2 #i ...
- POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)
POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...
- POJ 3177 Redundant Paths POJ 3352 Road Construction
这两题是一样的,代码完全一样. 就是给了一个连通图,问加多少条边可以变成边双连通. 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树 ...
- POJ 3177 Redundant Paths & POJ 3352 Road Construction(双连通分量)
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- POJ 3177——Redundant Paths——————【加边形成边双连通图】
Redundant Paths Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 3177 Redundant Paths【求最少添加多少条边可以使图变成双连通图】【缩点后求入度为1的点个数】
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11047 Accepted: 4725 ...
- POJ 3177 Redundant Paths(边双连通的构造)
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13717 Accepted: 5824 ...
随机推荐
- 迷你MVVM框架 avalonjs 学习教程11、循环操作
avalon是通过ms-repeat实现对一组数据的批量输出.这一组数据可以是一个数组,也可以是一个哈希(或叫对象).我们先从数组说起吧. 第二节就说,凡是定义在VM中的数组,如果没有以$开头或者没放 ...
- SQL 2008登录的域账户与数据库服务器不再同一个域的 处理方法
try this: Use RUNAS to set your Windows Auth domain for database connections runas /user:domain\user ...
- 疯狂JAVA——第五章 面向对象(上)
5.1类和对象 构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例.通过new关键字来调用构造器,从而返回该类的实例. 类名:每个单词首字母大写,其他字母小写,单词之间不要 ...
- Linux初学时的一些常用命令(2)
文件的操作 创建一个文件 touch 文件名 创建一个空白的文件 复制文件 cp 文件 目录/文件名 例如: cp 1.txt 2.txt cp 1.tx ...
- What is API Level?
[What is API Level?] 参考:http://android.xsoftlab.net/guide/topics/manifest/uses-sdk-element.html#ApiL ...
- Web标准:七、横向导航菜单
Web标准:七.横向导航菜单 知识点: 1.横向列表菜单 2.用图片美化的横向导航 3.css Sprites 1)横向列表菜单 可以在第四节课的基础上来实现横向导航菜单,只要给li一个float ...
- VB 共享软件防破解设计技术初探(二)
VB 共享软件防破解设计技术初探(二) ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http ...
- jQuery实现锚点滑动定位
go=function(index){ var top = $('#caseNewGuide' + index).offset().top; $('html, body').animate({ scr ...
- Petya and Graph(最小割,最大权闭合子图)
Petya and Graph http://codeforces.com/contest/1082/problem/G time limit per test 2 seconds memory li ...
- 在java中使用ffmpeg将amr格式的语音转为mp3格式
ffmpeg是一个非常强大的音视频处理工具,官网是:http://ffmpeg.org/. 由于ffmpeg在windows上和linux系统上的执行文件不一样(Windows上不需要安装ffmpeg ...