(连通图 ) 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 100005struct Edage {int v, next; } e[N<<2];int n, Index, bnt, cnt, top; int low[N], dfn[N], Head[N], Stack[N], belong[N], ru[N]; bool use[5005][5005];void Init() {Index = bnt = top = 0;memset(low, 0, sizeof(low));memset(dfn, 0, sizeof(dfn));memset(Head, -1, sizeof(Head));memset(use, 0, sizeof(use));memset(belong, 0, sizeof(belong));memset(ru, 0, 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!=-1; 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=0; 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(1, 1);for(i=1; i<=n; i++)for(j=Head[i]; j!=-1; j=e[j].next){if(belong[i]!=belong[e[j].v])ru[belong[i]]++;}int ans=0;for(i=1; i<=cnt; i++){if(ru[i]==1)ans++;}printf("%d\n", (ans+1)>>1);}return 0; }
又看了一遍连通图, 把之前的题都看了一遍,虽然现在该学匹配了,我却还在这下功夫,但这是有点作用的,下次再复习一下估计理解就更好了
转载于:https://www.cnblogs.com/YY56/p/4717661.html
(连通图 ) Redundant Paths --POJ --3177相关推荐
- Redundant Paths POJ - 3177(tarjan+边双连通分量)
题意: 有n个牧场,要求从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以经过 ...
- POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)
POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...
- POJ3177 Redundant Paths
POJ3177 Redundant Paths 文章目录 Description 题意: 题解: 代码: Time Limit: 1000MS Memory Limit: 65536K Total S ...
- [POJ3177]Redundant Paths(双联通)
在看了春晚小彩旗的E技能(旋转)后就一直在lol--额抽点时间撸一题吧-- Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Tota ...
- 【POJ - 3177】Redundant Paths(边双连通分量,去重边)
题干: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1.. ...
- POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)
这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...
- poj 3177 Redundant Paths(tarjan边双连通)
题目链接:http://poj.org/problem?id=3177 题意:求最少加几条边使得没对点都有至少两条路互通. 题解:边双连通顾名思义,可以先求一下连通块显然连通块里的点都是双连通的,然后 ...
- POJ 3177 Redundant Paths(边双联通分量)
题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...
- POJ - 3177 Redundant Paths 双联通补边
题目链接 题意:给出一个多条边问需要加几条变才能变成双连通图. 首先要缩点,缩点之后就是变成了一个没有强连通分量的图,这时候只需要统计入度为1的点有多少个,然后通过观察发现将点两两连接即可,answe ...
最新文章
- Teaching Machines to Converse--阅读笔记1 摘要及介绍
- 使用英伟达NeMo让你的文字会说话,零基础即可实现自然语音生成任务 | 附代码...
- 设计模式系列之十二:单例模式
- 第二章 Java基本语法(一)
- softmax实现多分类算法推导及代码实现
- Flask详解(下篇)
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
- Unity播放服务器端视频 发布到Android移动端
- 利用FFT成功实现拓扑识别(五)--关于频谱泄露
- 设计师都在用这5个免费素材网站
- UGUI实现图片特效轮播,使用插件DOTWEEN
- oracle 11g64 位 安装文件
- 多层板的板层布局和线宽的设置(记录)
- 2066服务器芯片组,华硕发布三款LGA2066对应工作站主机板
- 用Python实现序列帧播放器
- 立创开源 BGA162-809H
- thonny和python有什么关系_学习用 Thonny 写代码: 一个面向初学者的Python IDE
- ubuntu ps功能安装
- 玩转Mysql系列 - 第8篇:详解排序和分页(order by limit),及存在的坑
- Win Server 2016安装Oracle_11gR2数据库
热门文章
- axure html显示效果,Axure RP基础篇: 实现循环显示效果的两种方法
- 爆点客源4.1.0活动营销应用56版 修复朋友圈不显示问题
- 织梦dedecms模板--物流快递网站模板源码-带手机版数据同步
- 如何防止WordPress博客内容被恶意复制的教程
- Easytrader踩坑之旅(二)
- MySQL入门 (七) : 储存引擎与资料型态
- jQuery模拟原生态App上拉刷新下拉加载效果代码
- Python_pandas 两种主要的数据类型(Series、DataFrame)
- KVM 虚拟机在物理主机之间迁移的实现 -- 静态迁移/动态迁移/存储迁移
- 数据建模-聚类分析-K-Means算法