POJ--3352 道路建设

简介: POJ--3352 道路建设

POJ–3352 道路建设


题目描述

20210312212732221.png

输入样例1

10 12
1 2
1 3
1 4
2 5
2 6
5 6
3 7
3 8
7 8
4 9
4 10
9 10


输出样例1

2

输入样例2

3 3
1 2
2 3
1 3

输出样例2

0


题意分析:


景点就是图中的点,道路就是路径.题目要求任何道路建设过程中,仍然可以使用其他道路保证道路两边的景点仍然可以到达.在一个边双联通分量中,任意两个点之间存在两条以及以上的路径.我们这个题就是得构建双联通分量.

当我们运行Tarjan算法后,相同的双联通分量会有一个相同的low值,而且对于一个双联通分量来说,low值对应的就是第一次遍历到该连通分量的标号. 我们可以把这些双连通分量进行缩点,然后这就形成了一个树,如下图所示.然后我们统计叶子的个数,然后每两个叶子形成一条边,这样就形成了一条新的回路.树也就成了一个双联通图.


解题步骤


运行Tarjan算法求解双连通分量

样例1中,可求得边连通分量共有4个.样例2中双联通分量只有一个(所以需要添加0条边).

20210312214852416.jpg


将每个双连通分量缩成点.


20210312215052269.png


20210515135242988.png


计算需要的添加的新路数量.如果叶子数为k,则至少添加(k+1)/2边。例如,3个度为1的顶点,需要加两条边,4个度为1的顶点也需要加两条边。因为对于奇数个叶子节点,每两个需要一条边来构成双连通分量.也就是需要(k+1) / 2条边.如果偶数个点.则需要 k /2. 易知 k+1 / 2 与k/2值是一样的.所以都用k+1/2即可

202103122157048.png

疑惑点:

20210515135604805.png


算法设计


20210515135650423.png


参考代码


#include<iostream>
using namespace std;
const int maxn = 1000+10;
int head[maxn],num,vis[maxn],dfn[maxn],low[maxn],cnt,degree[maxn],leaf;//num:用于edge下标的控制 ,cnt:用于dfn的标号 
struct Edge{
  int next,to;
}e[maxn * maxn];
void add(int u,int v){
  e[++num].next = head[u];
  e[num].to = v;
  head[u] = num;
}
void tanjar(int u,int fa){
  dfn[u] = low[u] = ++cnt;
  for(int i = head[u]; i; i = e[i].next){
    int v = e[i].to;
    if(v==fa){
      continue;
    }
    if(!dfn[v]){
      tanjar(v,u);
      low[u] = min(low[u],low[v]);
    }else{
      low[u] = min(low[u],low[v]);
    }
  }
}
int main()
{
  int n,m,u,v;
  cin>>n>>m;
  while(m--){
    cin>>u>>v;
    add(u,v);
    add(v,u);
  }
  tanjar(1,0);
  for(int u = 1; u <= n; u++){//缩点 
    for(int j = head[u]; j; j =e[j].next ){
      int v = e[j].to;
      if(low[u]!=low[v]){
        degree[low[u]]++;
      }
    }
  }
  for(int i = 1;i <= n; i++){
    if(degree[i]==1){
      leaf++;
    }
  }
  cout<<(leaf+1)/2<<endl;
  return 0;
}
相关文章
|
2月前
|
监控 安全 量子技术
【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现
本文详细介绍了2023年第十三届MathorCup高校数学建模挑战赛B题的城市轨道交通列车时刻表优化问题,提供了详细的建模方案、优化目标、约束条件以及MATLAB代码实现,旨在最小化企业运营成本并最大化服务水平。
48 0
|
5月前
leetcode-807:保持城市天际线
leetcode-807:保持城市天际线
32 0
|
机器学习/深度学习 传感器 算法
2023美赛D题-确定联合国可持续发展目标的优先级思路及matlab代码
2023美赛D题-确定联合国可持续发展目标的优先级思路及matlab代码
|
PHP
fileinclude-宜兴网信办解题思路--呕心沥血--非常详细!
fileinclude-宜兴网信办解题思路--呕心沥血--非常详细!
74 2
|
算法
P5019 [NOIP2018 提高组] 铺设道路(贪心算法)
P5019 [NOIP2018 提高组] 铺设道路(贪心算法)
81 0
|
传感器 数据可视化 算法
全面了解三维重建在建筑领域应用:多种技术思路、落地案例全都有
全面了解三维重建在建筑领域应用:多种技术思路、落地案例全都有
417 0
|
机器学习/深度学习 传感器 算法
2023年第二十届五一数学建模竞赛 C题:“双碳”目标下低碳建筑研究参考思路及代码
2023年第二十届五一数学建模竞赛 C题:“双碳”目标下低碳建筑研究参考思路及代码
|
机器学习/深度学习 传感器 算法
2023美赛F题-绿色GDP思路及matlab代码
2023美赛F题-绿色GDP思路及matlab代码
|
人工智能
牛客 城市网络(倍增 思维)
牛客 城市网络(倍增 思维)
75 0
牛客 城市网络(倍增 思维)
|
开发工具
贤鱼的刷题日常--P1023 [NOIP2000 普及组] 税收与补贴问题--题目详解
🍀学习了解P1023 [NOIP2000 普及组] 税收与补贴问题
153 0
贤鱼的刷题日常--P1023 [NOIP2000 普及组] 税收与补贴问题--题目详解