题目链接

题意:给出一个多条边问需要加几条变才能变成双连通图。

首先要缩点,缩点之后就是变成了一个没有强连通分量的图,这时候只需要统计入度为1的点有多少个,然后通过观察发现将点两两连接即可,answer=(sum+1)/2;

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]= {0,-1,-1,0,0,1,1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=1e5+5;
int low[maxn],dfn[maxn];
int head[maxn],sign;
int inStack[maxn],Stack[maxn],belong[maxn],vis[maxn],in[maxn];
int t,top,cnt;
int n,q;
struct node
{int to,p;
}edge[maxn<<1];
void init()
{sign=t=top=cnt=0;for(int i=0;i<=n;i++){head[i]=-1;inStack[i]=dfn[i]=0;vis[i]=in[i]=0;}
}
void add(int u,int v)
{edge[sign]=node{v,head[u]};head[u]=sign++;
}
void tanjar(int u,int pre)
{dfn[u]=low[u]=++t;Stack[++top]=u;inStack[u]=1;for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(vis[i/2]) continue;if(!dfn[v]){vis[i/2]=1;tanjar(v,u);low[u]=min(low[u],low[v]);}else{if(inStack[v])low[u]=min(low[u],dfn[v]);}}int x;if(low[u]==dfn[u]){cnt++;do{x=Stack[top--];belong[x]=cnt;inStack[x]=0;}while(u!=x);}
}
int main()
{int x,k,y;while(cin>>n){init();scanf("%d",&k);while(k--) scanf("%d %d",&x,&y),add(x,y),add(y,x);for(int i=1;i<=n;i++) if(!dfn[i]) tanjar(i,i);for(int u=1;u<=n;u++){for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(belong[u]!=belong[v])in[belong[u]]++,in[belong[v]]++;}}int sum=0;for(int i=1;i<=cnt;i++)if(in[i]/2==1) sum++;printf("%d\n",(sum+1)/2);}return 0;
}

POJ - 3177 Redundant Paths 双联通补边相关推荐

  1. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  2. POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)

    这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...

  3. POJ 3177 Redundant Paths(边双联通分量)

    题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...

  4. poj 3177 Redundant Paths(tarjan边双连通)

    题目链接:http://poj.org/problem?id=3177 题意:求最少加几条边使得没对点都有至少两条路互通. 题解:边双连通顾名思义,可以先求一下连通块显然连通块里的点都是双连通的,然后 ...

  5. POJ 3177 Redundant Paths (边双连通+缩点)

    <题目链接> <转载于 >>>  > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...

  6. POJ - 3177 Redundant Paths(边双缩点)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,现在问至少添加几条边,才能使得任意两点之间都能由至少两条不同的路到达 题目分析:既然要让任意两点之间至少由两条道路连接,换句话说也就 ...

  7. poj 3177 Redundant Paths

    双连通分量 题意:给一个无向图,问要添加多少条边形成边双连通分量.注意图一开始是连通的,所以只要从一个点开始dfs一次就行了,另外这图有重边,(1,2)(2,1)这样,则1,2就形成了一个边双连通分量 ...

  8. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  9. [POJ3177]Redundant Paths(双联通)

    在看了春晚小彩旗的E技能(旋转)后就一直在lol--额抽点时间撸一题吧-- Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Tota ...

最新文章

  1. 提升机器学习数学,理论基础的7本著作(文末附资源下载!)
  2. 数位dp 3943 二分法
  3. [Java拾遗三]JavaWeb基础之Servlet
  4. 每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求
  5. 如何用r语言搜集报表_基迪奥免费小课堂——如何用R语言绘制GSEA plot
  6. Bootstrap分页功能
  7. MFC改变对话框背景颜色
  8. 2017web前端面试总结
  9. 合上More Exceptional C++的瞬间
  10. 素数筛法(python实现)
  11. Ps 原来排版证件照如此简单(╹ڡ╹ )
  12. 关于memset函数和赋值0x3f,2021-5-5
  13. 五星大饭店续集剧情大放送(最新更新)
  14. OpenGl运行窗口出现纯白色
  15. 计算机睡眠打印机不可用设置,win7系统下打印机属性显示不可用如何解决
  16. 六、v4l2 ctrl 函数初始化---增加自定义接口v4l2_ctrl_new_custom
  17. 电磁兼容(EMC):工程师必备之硬件EMC设计规范
  18. Vue项目加载过慢优化研究
  19. 【调剂】南华大学2021硕士研究生招生调剂公告
  20. 文件传服务器上全是乱码,解决txt文件上传oss服务器乱码的问题

热门文章

  1. Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期
  2. Java清空数组的数据
  3. ARouter::Compiler No module name, for more information, look at gradle log
  4. 怎样往csdn上传自己的demo
  5. MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图
  6. 【总结】sqli-labs Less(1-35) 小结
  7. Notepad++支持jQuery、html5、css3
  8. Servlet中的配置 web.xml
  9. JS动态改变文本中光标位置
  10. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)