题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5631

解题思路:

这题要求删除边,使得无向图继续连通。

由于n个节点只有n+1条边,所以要么删除一条边,要么删除两条边。

数据量比较小,可以枚举要删除的边即可。

删除一条边很简单,关键是怎么删除两条边。这里提供一个用图论的方法解决。

假设我们先枚举删除的两条边中的一条,那么要在剩下的图当中再找一条边。到底要删哪一条呢?反正不能是割边对吧,原因你懂的。

那么这个问题转化为求割边数量了。。。剩下的边减去割边就是可以再删掉的一条边。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;const int maxn = 105;
struct Edge
{int u,v;
}edge[maxn];
int n,ans,sum,map[maxn][maxn];
int dfsn[maxn],Index,low[maxn];
bool cut[maxn][maxn];void Tarjan(int u,int fa)
{dfsn[u] = low[u] = ++Index;for(int i = 1; i <= n; i++){if(map[u][i] == 0 || i == fa) continue;if(dfsn[i] == 0){Tarjan(i,u);low[u] = min(low[u],low[i]);if(low[i] > dfsn[u] && map[u][i] == 1)cut[u][i] = cut[i][u] = true;}else low[u] = min(low[u],dfsn[i]);}
}void solve()
{Index = 0;memset(dfsn,0,sizeof(dfsn));memset(cut,false,sizeof(cut));Tarjan(1,0);for(int i = 1; i <= n; i++)if(dfsn[i] == 0) //去掉一条边后不连通{sum--;return;}int cnt = 0; //割边数量for(int i = 1; i <= n; i++)for(int j = i + 1; j <= n; j++)if(cut[i][j] == true)cnt++;ans += n - cnt;
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);memset(map,0,sizeof(map));ans = 0;sum = n + 1; //sum表示只去掉一条边的条数for(int i = 1; i <= n + 1; i++){scanf("%d%d",&edge[i].u,&edge[i].v);map[edge[i].u][edge[i].v]++;map[edge[i].v][edge[i].u]++;}for(int i = 1; i <= n + 1; i++) //删除第i条边{map[edge[i].u][edge[i].v]--;map[edge[i].v][edge[i].u]--;solve();map[edge[i].u][edge[i].v]++; //恢复第i条边map[edge[i].v][edge[i].u]++;}printf("%d\n",ans / 2 + sum);}return 0;
}

hdu 5631 Rikka with Graph(无向图的割边)相关推荐

  1. hdu 5631 Rikka with Graph(图)

    n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i ...

  2. HDU 6090 Rikka with Graph

    Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...

  3. HDU 6090 Rikka with Graph 思维 公式

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6090 题目描述: 有n个点, 你可以连m条边, 使得∑ni=1∑nj=1dist(i,j).最小, ...

  4. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  5. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  6. hdu 6086 Rikka with String(AC自动机+状压dp)

    题目链接:hdu 6086 Rikka with String 题意: 给你n个只含01的串,和一个长度L,现在让你构造出满足s[i]≠s[|s|−i+1] for all i∈[1,|s|] ,长度 ...

  7. HDU 6085 Rikka with Candies (暴力压位)

    题目链接 HDU 6085 Rikka with Candies 分析 其实很容易想到一个有技巧的暴力方法,我们可以这样办 首先对于每一个 AiA_i 我们考虑比 AiA_i 大的部分 BB ,对于这 ...

  8. hdu5424 Rikka with Graph II

    给一个n个节点n条边的无向图G,试判断图中是否存在哈密顿路径. 若G中存在哈密顿路径l,则路径端点度数不小于1,其余点度数不小于2. 则G存在哈密顿路径的必要条件: 1)G连通: 2)G中度数为1的点 ...

  9. 【HDU - 5876】Sparse Graph(补图bfs,STLset)

    题干: In graph theory, the complementcomplement of a graph GG is a graph HH on the same vertices such ...

最新文章

  1. 报名丨2019全球AI文创大赛启动仪式邀您参加!
  2. 【Azure Services Platform Step by Step-第1篇】INTRODUCING THE AZURE SERVICES PLATFORM
  3. numpy np.matmul()(两个数组的矩阵乘积)
  4. python之网络编程 --- TCP编程
  5. 编写高质量代码的50条黄金守则-Day 01(首选隐式类型转换)
  6. python逐行读取与逐行写入txt文件
  7. 百度邮件曝光:高级技术总监接管CTO工作
  8. jQuery学习(二)—jQuery对象的获取
  9. 枚举smb共享期间出错_大量三星手机黑屏系统崩溃,客服:闰4月计算出错
  10. 印章识别软件_一种印章识别方法及系统技术方案
  11. 软件测试周刊(第82期):其实所有纠结做选择的人心里早就有了答案,咨询只是想得到内心所倾向的选择。
  12. oracle rac 部署方案,RAC基础设施部署方案
  13. 容错性低是什么意思_王者荣耀:在成为高手之前,这4位容错率低的千万别碰!...
  14. 关于springboot中Cacheable使用说明
  15. 工作进度跟踪表excel_在Excel中跟踪时间
  16. 电大计算机形考试题,电大计算机形考试题1.doc
  17. EasyPoi的简介
  18. Mac Raw 恢复|还原Raw格式硬盘或Raw分区数据恢复
  19. 基金的募集、申购、赎回与交易
  20. 电脑已连接无Internet访问解决记录

热门文章

  1. 深入浅出:移动端(Android 和 iOS)数据采集埋点 SDK
  2. 神策数据荣获“2017年度中国双创好项目”奖项
  3. 周五话分析 | 共享单车起航,数据分析跟上
  4. JavaScript:从此不再怕闭包
  5. Android Annotation-让你的代码更加优雅(二)做一个Java诗人(JavaPoet)
  6. 618 京东到家-小程序也狂欢
  7. SSH实现无密码验证
  8. Unix平台上OUI启动常见问题
  9. SQL server 2008 数据库企业版安装教程图解 (转载)
  10. SAP BAPI的一些初级资料