一道比较简单的 关于边双的题,个人感觉难度不大。

求出整个图的边双,根据边双的定义我们可以延伸出 边双的任两个点都有至少两种路径来互相抵达(因为其不存在割边) 。不妨将每个边双缩成一个点,样例中的图便变成了一棵树:



为什么呢?因为缩了点之后的图如果存在环,这个环便又可以构成一个边双了。

我们发现只要 将所有的叶子节点(度为1)的节点连起来,整个图便就构成了一个边双。那么我们的做法就很明确了,选取一个度不为1的点作为根,统计度为1的节点的数量n,答案便是(n+1)/2.

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <cstdio>
using namespace std; #define N 5010
#define M 10010
#define LL long long struct node {
int to,no;
node () {};
node (int T,int No) {
to=T;no=No;
}
}; LL flag,ans,value[M],n,m,num,cntn,DFN[N],IsCut[M],low[N];
vector <node> G[N]; LL read() {
LL f=1,s=0;char a=getchar();
while(!(a>='0'&&a<='9')) { if(a=='-') f=-1 ; a=getchar(); }
while(a>='0'&&a<='9') { s=s*10+a-'0'; a=getchar();}
return f*s;
} int min(int a,int b) {
if(a<b) return a;
return b;
} void Tarjan(LL u,LL fano) {
DFN[u]=low[u]=++num;
for(LL i=0;i<G[u].size();i++) {
LL v=G[u][i].to,vno=G[u][i].no;
if(!DFN[v]) {
Tarjan(v,vno);
if(low[v]>DFN[u]) {
IsCut[vno]=1;
cntn++;
}
low[u]=min(low[u],low[v]);
}
else if(DFN[u]>DFN[v] && vno!=fano)
low[u]=min(low[u],DFN[v]);
}
} bool vis[N];
int belong[M],rel[N],cntno,cnt=1; void init() {
memset(low,0,sizeof(low));
memset(DFN,0,sizeof(DFN));
memset(IsCut,0,sizeof(IsCut));
memset(vis,0,sizeof(vis));
cin>>n>>m;
for(int i=1;i<=n;i++)
G[i].clear();
cntno=cntn=0;
for(int i=1,u,v,w;i<=m;i++) {
u=read();v=read();
G[u].push_back( node (v,cnt) );
G[v].push_back( node (u,cnt++) );
} } int dfs(int u) {
belong[u]=cntno;
for(int i=0,v,vno;i<G[u].size();i++) {
v=G[u][i].to,vno=G[u][i].no;
if(!IsCut[vno] && !belong[v])
dfs(v);
}
} bool book[N][N]; int main() {
init();
Tarjan(1,-1);
for(int i=1;i<=n;i++)
if(!belong[i]) {
cntno++;
dfs(i);
} //cout<<cntno<<endl;
for(int i=1;i<=n;i++)
for(int j=0;j<G[i].size();j++) {
int x=belong[i],y=belong[G[i][j].to];
if(x!=y ) {
rel[x]++; //rel统计边双的度
}
}
for(int i=1;i<=n;i++)
if(rel[i]==1)
ans++;
cout<<(ans+1)/2<<endl;
}

C++边双缩点,Redundant Paths 分离的路径的更多相关文章

  1. Redundant Paths 分离的路径【边双连通分量】

    Redundant Paths 分离的路径 题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields ...

  2. 【bzoj1718】Redundant Paths 分离的路径

    1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 964  Solve ...

  3. [Usaco2006 Jan] Redundant Paths 分离的路径

    1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1132  Solv ...

  4. Redundant Paths 分离的路径

    Redundant Paths 分离的路径 题目描述 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她 ...

  5. BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )

    tarjan求边双连通分量, 然后就是一棵树了, 可以各种乱搞... ----------------------------------------------------------------- ...

  6. BZOJ1718:[USACO]Redundant Paths 分离的路径(双连通分量)

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  7. BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径【边双模板】【傻逼题】

    LINK 经典傻逼套路 就是把所有边双缩点之后叶子节点的个数 //Author: dream_maker #include<bits/stdc++.h> using namespace s ...

  8. 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径

    [题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...

  9. [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)

    题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...

随机推荐

  1. CCPC-Wannafly Winter Camp Day1 (Div2) 吃豆豆 (DP)

    题目描述 wlswls在玩一个游戏. wlswls有一个nn行mm列的棋盘,对于第ii行第jj列的格子,每过T[i][j]T[i][j]秒会在上面出现一个糖果,第一次糖果出现在第T[i][j]T[i] ...

  2. Flask实现分页功能

    可以参考: https://blog.csdn.net/weixin_36380516/article/details/80295101 也可以参考我的代码: https://github.com/z ...

  3. MYSQL数据导出与导入,secure_file_priv参数设置

    https://www.imooc.com/article/41883 MySQL 报错 [Code: 1290, SQL State: HY000]  The MySQL server is run ...

  4. 查看PL/SQL编译时的错误信息

    编译无效对象是DBA与数据库开发人员常见的工作之一.对于编译过程中的错误该如何去捕获,下面给出两种捕获错误的方法. 一.当前数据库版本信息及无效对象 1.查看当前数据库版本 [sql] view pl ...

  5. XTemplate模板学习和使用总结

    XTemplate模板学习和使用总结 前言   XTemplate是我接触的第一个模板语言,用在公司的一个NodeJS项目中,跟它打交道经常是因为需要使用它的语法向模板中注入数据.因为是刚入门前端不久 ...

  6. 《SaltStack技术入门与实践》—— Event和Reactor系统

    Event和Reactor系统 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Event是SaltStack里面的对每个事件的一个记录,它相比job ...

  7. 无法启动链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息"无法在此会话中启动更多的事务"。

    无法启动链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 的嵌套事务.由于 XACT_ABORT 选项已设置为 OFF,因 ...

  8. json对象之间的转化

    json字符串转化为 1.使用JSON.parse()函数 使用eval()函数 2.json对象转化为json字符串 使用JSON.stringify()

  9. 阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效

    今天我们要说的 AV1 可不是我们平时说的 .AVI 文件格式,它是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源.免版权费的视频编码格式,可以解决H.265昂 ...

  10. B/S超大文件上传与下载

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...