(无源点有向图最小树形图)Ice_cream’s world II

博客探讨了在无源点有向图中构建最小树形图的问题。通过添加虚拟节点,使得虚拟节点到所有点的距离大于原有边的总和。若计算结果大于总和,表明图不连通,不存在最小树形图。寻找最小入弧来确定真正根节点,利用最小入边性质确保找到的根是最小序号的根。
摘要由CSDN通过智能技术生成

http://acm.hdu.edu.cn/showproblem.php?pid=2121

加一个虚梗(原本不存在的点),可以让这个虚根到每个点的距离大于原本所有点所连接的道路花费之和sum,然后计算出的结果减去sum,如果比sum还大就可以认为通过这个虚拟节点我们连过原图的两个点,即原图是不联通的,我们就可以认为不存在最小树形图。那么真正的根呢,在找最小入弧时,如果这条弧的起点时虚拟根,那么这条弧的终点就是要求的根,因为如果存在多解的话,必然存在一个环,环上的顶点都可以做根,但是我们根据最小入边的性质,可知,如果没缩点,必然找不到那个根,因为虚拟根连的边都特别大。但是缩点后,找到的必然是最小的那个序号的根。

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn = 1e3 + 3;
const ll inf = 1e17;
int id[maxn], vis[maxn], pre[maxn], pos;
ll d[maxn];
struct node {
    int u, v, w;
} E[maxn * maxn];
ll undirected_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值