POJ3177:Redundant Paths——题解
http://poj.org/problem?id=3177
明显要求桥的一道题。
(因为有桥就说明只能从那一条路走,换句话说就是只有一种方法)
求完桥后按照结论(加几条边成双连通图的结论,不会请baidu)就可以输出ans啦!
(为此学了一下新的桥的求法……原来的那个常数太大了)
#include<stack>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
inline int read(){
int x=,w=;char ch=;
while(ch<''||ch>''){if(ch=='-')w=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*w;
}
const int maxn=;
int cnt=,head[maxn];
struct node{
int w;
int ed;
int nxt;
int st;
}edge[];
void add(int u,int v){
cnt++;
edge[cnt].ed=v;
edge[cnt].st=u;
edge[cnt].nxt=head[u];
head[u]=cnt;
return;
}
bool bridge[];
int dfn[maxn];
int low[maxn];
bool instack[maxn];
int fa[maxn];
int from[maxn];
int indeg[maxn];
int t=;
void tarjan(int u){
t++;
dfn[u]=t;
low[u]=t;
for(int i=head[u];i;i=edge[i].nxt){
if(i==(from[u]^))continue;
int v=edge[i].ed;
if(!dfn[v]){
from[v]=i;
tarjan(v);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u])bridge[from[v]]=bridge[from[v]^]=;
}else{
low[u]=min(low[u],dfn[v]);
}
}
return;
}
int find(int a){
if(fa[a]==a)return a;
return fa[a]=find(fa[a]);
}
int main(){
int f=read();
int r=read();
for(int i=;i<=r;i++){
int u=read();
int v=read();
add(u,v);
add(v,u);
}
tarjan();
for(int i=;i<=f;i++)fa[i]=i;
for(int i=;i<=cnt;i+=){
if(!bridge[i])fa[find(edge[i].st)]=find(edge[i].ed);
}
for(int i=;i<=cnt;i+=){
if(bridge[i])indeg[find(edge[i].st)]++,indeg[find(edge[i].ed)]++;
}
int leaf=;
for(int i=;i<=f;i++){
if(find(i)==i){
if(indeg[i]==)leaf++;
}
}
printf("%d\n",(leaf+)/);
return ;
}
POJ3177:Redundant Paths——题解的更多相关文章
- POJ3177 Redundant Paths 双连通分量
Redundant Paths Description In order to get from one of the F (1 <= F <= 5,000) grazing fields ...
- POJ3177:Redundant Paths(并查集+桥)
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19316 Accepted: 8003 ...
- POJ3177 Redundant Paths —— 边双联通分量 + 缩点
题目链接:http://poj.org/problem?id=3177 Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total ...
- [POJ3177]Redundant Paths(双联通)
在看了春晚小彩旗的E技能(旋转)后就一直在lol……额抽点时间撸一题吧…… Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Tota ...
- poj3352 Road Construction & poj3177 Redundant Paths (边双连通分量)题解
题意:有n个点,m条路,问你最少加几条边,让整个图变成边双连通分量. 思路:缩点后变成一颗树,最少加边 = (度为1的点 + 1)/ 2.3177有重边,如果出现重边,用并查集合并两个端点所在的缩点后 ...
- poj3177 Redundant Paths
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- POJ3177 Redundant Paths(边双连通分量+缩点)
题目大概是给一个无向连通图,问最少加几条边,使图的任意两点都至少有两条边不重复路径. 如果一个图是边双连通图,即不存在割边,那么任何两个点都满足至少有两条边不重复路径,因为假设有重复边那这条边一定就是 ...
- [POJ3177]Redundant Paths(双连通图,割边,桥,重边)
题目链接:http://poj.org/problem?id=3177 和上一题一样,只是有重边. 如何解决重边的问题? 1. 构造图G时把重边也考虑进来,然后在划分边双连通分量时先把桥删去,再划分 ...
- POJ3177 Redundant Paths【双连通分量】
题意: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另一个牧场时总是可以 ...
随机推荐
- php post
post form function post($remote_server,$data,$second=60){ $ch = curl_init();if(is_string($data)){ $t ...
- 请求头(request)和响应头(response)
说一说常见的请求头和相应头都有什么呢? 1)请求(客户端->服务端[request]) GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采 ...
- hdu6027Easy Summation(快速幂取模)
Easy Summation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 6.2 element和elements
为什么这个要单独拿出来说,因为我在很多群里面看见很多人不能区分这个! 因为之前的包有点问题,另外后续还会更换app,因为部分app可能没有符合的案例场景,我需要找到那个场景给大家做个实例..便于大家跟 ...
- Python列表操作大全(非常全)
Python列表操作大全(非常全!!!) 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且 ...
- Python中assert的作用?
1. assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常. 什么情况下我们会需要这样的代码呢 ...
- 【radio-group、radio】 单选项组件说明
radio-group组件是包裹radio组件的容器 原型: <radio-group bindchange="[EventHandle]"> <radio .. ...
- Java 集合学习--HashMap
一.HashMap 定义 HashMap 是一个基于散列表(哈希表)实现的键值对集合,每个元素都是key-value对,jdk1.8后,底层数据结构涉及到了数组.链表以及红黑树.目的进一步的优化Has ...
- 本地矩阵(Local Matrix)
本地矩阵具有整型的行.列索引值和双精度浮点型的元素值,它存储在单机上.MLlib支持稠密矩阵DenseMatrix和稀疏矩阵Sparse Matrix两种本地矩阵,稠密矩阵将所有元素的值存储在一个列优 ...
- 使用手机登录OWA修改密码的问题
最近发现使用手机端登录OWA,安卓手机是可以修改密码的,如图1,但是iPhone就不成,safari和第三方都不可以,如图二. 图一 图二