输出图中所有负环上的点

2023-05-16

#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

const int INF = 0x3f3f3f3f;
const int MAX_V = 100 + 1;
int V, m;
typedef pair<int, int> P;
struct edge {
    int to, cost;
    edge(int t, int c) {
        to = t;
        cost = c;
    }
};
vector<edge> map[MAX_V];
int d[MAX_V], book[MAX_V], numv[MAX_V];
//Bellmanford是将从起点st开始的最短路求出来,在负环里的点距离直接变为-INF,且V次入队以后不再入队。
void Bellmanford(int st) {
    queue<int> q;
    fill(d, d + V + 1, INF);
    memset(book, 0, sizeof(book));
    memset(numv, 0, sizeof(numv));
    d[st] = 0, book[st] = 1, numv[st]++;
    q.push(st);
    while (q.size()) {
        int tmp = q.front();
        q.pop();
        book[tmp] = 0;
        for (auto i : map[tmp]) {
            if (d[i.to] > d[tmp] + i.cost) {
                d[i.to] = d[tmp] + i.cost;
                if (!book[i.to]) {
                    book[i.to] = 1;
                    numv[i.to]++;
                    if (numv[i.to] >= V)
                        d[i.to] = -INF;
                    if (numv[i.to] <= V)
                        q.push(i.to);
                }
            }
        }
    }
}
int main() {
    cin >> V >> m;
    while (m--) {
        int a, b, c;
        cin >> a >> b >> c;
        map[a].push_back(edge(b, c));
        map[b].push_back(edge(a, c));
    }
    int ans[V + 1];
    memset(ans, 0, sizeof(ans));
    //如果在负环内的点,到每个点的距离必然是-INF
    for (int i = 1; i <= V; i++) {
        Bellmanford(i);
        for (int j = 1; j <= V; j++) {
            if (d[j] != -INF)
                ans[i] = 1;
        }
    }
    for (int i = 1; i <= V; i++)
        if (!ans[i])
            cout << i << " ";
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

输出图中所有负环上的点 的相关文章

  • opencv学习之(三)-LBP算法的研究及其实现

    一 xff0c 原始LBP算法 LBP的基本思想是对图像的像素和它局部周围像素进行对比后的结果进行求和 把这个像素作为中心 xff0c 对相邻像素进行阈值比较 如果中心像素的亮度大于等于他的相邻像素 xff0c 把他标记为1 xff0c 否
  • opencv学习之(五)-直方图计算和绘制图像直方图

    1 直方图 灰度直方图的定义 灰度直方图是灰度级的函数 xff0c 描述图像中该灰度级的像素个数 xff08 或该灰度级像素出现的频率 xff09 xff1a 其横坐标是灰度级 xff0c 纵坐标表示图像中该灰度级出现的个数 xff08 频
  • 学习opencv之(六)-图像切割,使用ROI

    一 ROI介绍 在OpenCV中我们能够非常方便地获取指定ROI区域的子图像 如果你对图像设置了ROI xff0c 那么 xff0c Opencv的大多数函数只在该ROI区域内运算 xff08 只处理该ROI区域 xff09 xff0c 如
  • 虚拟机Ubuntu蓝屏闪屏解决方法

    问题分析 启动 Ubuntu 可以进入登录界面 xff0c 但是系统界面蓝屏 xff0c 说明系统是可以运行起来的 证明系统是没有问题的 应该是系统插件发生了错误 没有发生大块的核心数据损坏 xff0c linux 系统一般都以修复 xff
  • meta标签清理缓存

    meta标签清理缓存 如果需要在html页面上设置不缓存 xff0c 这在 lt head gt 标签中加入如下语句 xff1a lt meta http equiv 61 34 Pragma 34 content 61 34 no cac
  • Go语言入门(二)——Ubuntu系统中Go的安装

    下载并安装 安装包地址 xff1a https golang google cn dl 选择这个下载 xff0c 稍等几秒即可 下载下来的压缩包在Downloads文件夹中 解压二进制文件 将下载的二进制包解压至 usr local目录 x
  • /etc/apt/sources.list" E212: Can't open file for writing解决方案

    w sudo tee gt dev null 解决 转载于 https www cnblogs com tangyouwei p 10109090 html
  • poj 1947 树形dp(得到含P个节点联通块的最小切边数)

    题意 xff1a 给定一颗树 xff0c 通过删除边要得到一个含有P个节点的连通块 xff0c 问最小的删边数 思路 xff1a 树形DP dp x i 记录x结点 xff0c 要得到一棵i个节点的子树去掉的最少边数 搜索到x节点时 xff
  • BMC相关

    BMC基本概念介绍 xff1a BMC xff1a 基板管理控制器 Baseboard Management Controller BMC xff08 Baseboard Management Controller xff0c 基板管理控制
  • ARM ASPEED 2500 uboot openbmc linux 启动记录

    支持原创 xff0c 转载请注明出处 ARM ASPEED 2500 uboot openbmc linux 启动记录 前言 其实openbmc 官方推荐的方法是使用Yocto poky方法来定制aspeed 2500相关的组件 xff0c
  • Serdes 原理及调试学习

    Serdes原理与设计实践之一 xff1a Serdes简介 1 Serdes简介 为了提高接口传输带宽 xff0c 设计中经常采用并行总线设计 并行总线通过提高时钟速率和数据位宽来提高传输带宽 限制接口传输带宽主要有2个方面 xff1a
  • 查看当前Linux系统的内核编译config文件,生成编译驱动所需的内核头文件

    1 xff09 查看内核配置选项 有时候我们需要查看Linux系统的内核是否在编译的时候的编译选项 xff0c 从而确定某个模块是否已经加入到内核以及参数设置等等 xff0c 方法有两种 xff1a zcat proc config gz
  • objdump adr2line定位驱动问题

    https linux kernel labs github io refs heads master labs kernel modules html https linux kernel labs github io refs head
  • debian查询命令所属软件包的方法

    在debian系统中 xff0c 类似centos的yum whatprovides这条查询系统中某个命令属于哪个安装包的命令 xff0c 有如下两类方法 xff08 离线查找和非离线查找 xff09 xff1a 第一种 xff0c 查本机
  • warning: function declaration isn’t a prototype(函数声明不是原型)的解决办法

    linux驱动中定义一个无参的函数 int probe num 警告 xff1a 函数声明不是一个原型 Wstrict prototypes 应对方法 xff1a 改成 int probe num void 警告消失
  • fstat函数

    stat系统调用系列包括了fstat stat和lstat xff0c 它们都是用来返回 相关文件状态信息 的 xff0c 三者的不同之处在于设定源文件的方式不同 1 首先隆重介绍的是一个非常重要的 VIP 人物 xff0c 他是fstat
  • c语言中用宏定义一个常量,数字后面带个U, L, F的含义

    c语言中数字后面带个U是什么意思 xff1f define F CPU 12000000U 答 xff1a U表示该常数用无符号整型方式存储 xff0c 相当于unsigned int L表示该常数用长整型方式存储 xff0c 相当于lon
  • 解决sudo: npm: command not found

    sudo ln s opt node v11 4 0 bin npm usr bin npm sudo ln s opt node v11 4 0 bin node usr bin node 转载于 https www cnblogs co
  • python 安装本地包的方法

    pip install whl 直接在pip install命令后添加whl包的全路径名就能本地安装成功了 下载需要的包 xff0c 一般为zip tar gz等的压缩包 xff0c 解压后 xff0c 打开命令行 xff0c 进入解压目录

随机推荐