POJ 2125 Destroying The Graph (最小点权覆盖集)

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】 各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。 阅读详情

基本概念:

点覆盖集:(vertex covering set,VCS)是无向图的一个点集,使得该图中所有边都至少有一个端点在该集合内。形象地说是若干个点“覆盖”住了与它们邻接的边,这些边恰好组成了原边集。

最小点权覆盖集:(minimum weight vertex covering set,MinWVCS)是在带点权无向图G中,点权之和最小的点覆盖集。

题意:对一个有n个点,m条边的有向图,有两种操作:

A(u)操作:删除点u的所有出边,即∀(u, v)∈E,操作花费代价w+(u);

B(u)操作:删除点u的所有入边,即∀(v, u)∈E,操作花费代价w-(u);  求(1 )删除原图所有边所需的最小话费 (2 )输出方案,如1 - , 2 +。。。

对于第一问,用最小割最大流解决。建图:增加源点s和汇点t ,,根据题意构造二分图,X和Y点集分别代表A(u)和 B(u)。从源点s向所有X集合点增加弧(s, u), 容量为w+(u);然后从左右Y集合中点出发向汇点t,增加弧(u, t),容量为w-(u); 若原图存在一条有向边(u, v), 则增加弧(u, v),容量为INF。答案便是s到t的最大流。

第二问:求完最大流后,对残量网络进行dfs,沿着所有未满流的弧走。对于所有(s, u),如果u被访问了,则未在u节点进行A操作。由于对于一条边必然有一个端点进行了操作,所以对于所有(u, t),如果u节点被访问了,则必有操作B(u)。

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

const int maxn =  300;
const int INF = 1e9;
//Dinic模板
struct Edge
{
    int from, to, cap, flow;
};

int n, m, u, v, k, s, t;
vector<int> G[maxn];
vector<Edge> edges;
bool vis[maxn];
int d[maxn], cur[maxn];

inline void init()
{
    for(int i=0; i<=t; i++) G[i].clear();
    edges.clear();
}

void add(int from, int to, int cap)
{
    edges.push_back((Edge){from, to, cap, 0});
    edges.push_back((Edge){to, from, 0, 0});
    k = edges.size();
    G[from].push_back(k-2);
    G[to].push_back(k-1);
}

bool bfs()
{
    memset(vis, 0, sizeof(vis));
    queue<int> Q; Q.push(s);
    vis[s] = 1; d[s] = 0;
    while(!Q.empty())
    {
        int x = Q.front(); Q.pop();
        for(int i=0; i<G[x].size(); i++)
        {
            Edge& e = edges[G[x][i]];
            if(!vis[e.to] && e.cap > e.flow)
            {
                vis[e.to] = 1;
                d[e.to] = d[x] +1;
                Q.push(e.to);
            }
        }
    }
    return vis[t];
}

int dfs(int x, int a)
{
    if(x == t ||a == 0) return a;
    int flow = 0, f;
    for(int& i=cur[x]; i<G[x].size(); i++)
    {
        Edge& e = edges[G[x][i]];
        if(d[x]+1 == d[e.to] && (f = dfs(e.to, min(a, e.cap - e.flow))) >0)
        {
            e.flow += f;
            edges[G[x][i]^1].flow -= f;
            flow += f;
            a -= f;
            if(a == 0) break;
        }
    }
    return flow;
}

int max_flow()
{
    int flow = 0;
    while(bfs())
    {
        memset(cur, 0, sizeof(cur));
        flow += dfs(s, INF);
    }
    return flow;
}
//Dinic模板

void dfs1(int u) //对残量网络进行dfs
{
    vis[u] = 1;
    for(int i=0; i<G[u].size(); i++)
    {
        Edge v = edges[G[u][i]];
        if(v.flow < v.cap &&!vis[v.to])//沿着未满流的弧走
            dfs1(v.to);
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    //构图
    s = 0;  t = 2 * n + 1;
    init();
    int val;
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &val);
        add(i + n, t, val);
    }
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &val);
        add(s, i, val);
    }
    while(m--)
    {
        scanf("%d%d", &u, &v);
        add(u, v + n, INF);
    }
    printf("%d\n", max_flow());//输出第一问

    memset(vis, 0, sizeof(vis));
    dfs1(s);

    int ans_cnt = 0;
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])  ans_cnt++;
        if(vis[i + n]) ans_cnt++;
    }
    printf("%d\n", ans_cnt); //输出第二问
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])  printf("%d -\n", i);
        if(vis[i+n])   printf("%d +\n", i);
    }
    return 0;
}


海上风电经柔性直流送出系统的阻抗建模与稳定性分析 摘要 本文针对海上风电经柔性直流送出系统的稳定性问题,提出了一种基于阻抗建模的分析方法。研究建立了直驱永磁同步发电机(PMSG)的序阻抗解析模型和模块化多电平换流器(MMC)的交流侧小信号阻抗模型,通过Matlab/Simulink平台实现了完整的仿真验证系统。采用谐波线性化原理和端口阻抗分析法,揭示了风电机组与柔直换流器之间的阻抗匹配特性对系统稳定性的影响规律。研究结果表明,控制参数设置会显著改变系统阻抗特性,进而影响稳定裕度。文中提出的阻抗建模方法为分析海上风电柔直送出系统的宽频振荡问题提供了有效工具, 阅读详情

相关推荐

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 408

POJ 2125 Destroying The Graph

传送门:POJ 2125 #include #include #include #include #define N 300 #define M 20000 #define INF 99999999 using namespace std; int to[M],next[M],head[N],len[M],cnt,layer[N],n,m,S,T,q[M]; bool vis[N]

论菜鸟的自我修养。。。 368

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 399

【POJ2125】Destroying The Graph(最小权覆盖点集)

Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that Bob tries to destroy it. In a move he may take any vertex of the graph and remove either all

No Program No Life 434

基于STM32的智能水温控制系统设计

智能水温控制系统广泛应用于家庭、工业、农业等多个场景,尤其在热水器、恒温泳池和地暖系统中,通过实时监测和调节水温,提高设备的效率和用户的舒适度。本文基于STM32微控制器设计了一个智能水温控制系统,能够实时监测水温、用户设置温度,并根据需要控制加热器或冷却装置,确保水温维持在设定范围内。系统能够根据用户设定自动控制加热和冷却设备,确保水温维持在舒适的范围内,并通过OLED屏实时显示水温信息。在生成的项目基础上,编写水温监测、目标温度设定、加热器和冷却装置控制、OLED数据显示以及超温报警的代码。

2401_88410555的博客 2475

数据结构课程设计--基于知识图谱的中医食疗数据管理与应用

【代码】数据结构课程设计--基于知识图谱的中医食疗数据管理与应用。

M_inherit的博客 566

Codeforces1198 E. Rectangle Painting 2(网络流,二分图最小点权覆盖)

题意: 有一个n*n的矩阵,其中有m块子矩阵是黑色的. 一次操作你可以选择一个子矩阵,将它涂成白色, 假设子矩阵的边长为h*w,那么代价为min(h,w)。 问将所有黑色格子变成白色的最小代价。 数据范围:n<=1e9,m<=50,给定的子矩阵可能相交 解法: 因为代价是对h和w取min, 那么选择一个矩形可以拆分为选择若干行或者列,显然这样最优, 那么问题可以转化为,一次操作可以选择一行或者一列, 用最少的操作次数,将所有黑点覆盖. 这是一个典型的二分图最小点覆盖问题. 但是题目里面给的不是黑

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 254

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2172

poj2125 Destroying The Graph(二分图最小点权覆盖集,最小割输出割边)

把每个点分成入和出,显然是张二分图,就是求最小点权覆盖集,可以用最小割解决。问题在于输出最小割的割边。蒟蒻才发现以前自己的理解是不正确的。 最小割的割边一定满流是没有错的,但是反过来,满流的边就是割边是错误的。比如你看s->x->y->t,容量都相同。则割边一条即可,无需所有满流的三条边。那如何找到割边呢? 在残余网络上从s开始跑一遍dfs,可以到的点都是属于S集合的。然后枚举每一条边x->y,

Icefox的博客 582

备赛电赛学习硬件篇(六):复位电路工作原理

上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。

m0_61022809的博客 6771

【yolo】YOLOv8模型导出完全指南:从PT到ONNX及其他格式的完整实践

摘要:本文全面介绍了YOLOv8模型从PT格式导出为ONNX等部署格式的完整流程与最佳实践。重点解析了关键参数(如format、imgsz、simplify)的作用机制,特别强调输入尺寸imgsz会自动继承训练尺寸的特性,并提供了ONNX、TensorRT等格式的典型导出配置方案。文章还总结了常见问题解决办法,推荐使用simplify优化模型性能,同时分享了通过C#实现模型重命名的实用技巧。最后指出"训练决定能力,导出定义接口"的核心原则,帮助开发者高效完成模型部署转换。

songhuangong123的博客 1917

POJ2125Destroying The Graph(二分图最小割可行边)

我发现很多人关于输出方案那个地方解释都是错的,这不是误导别人吗!!! 能ac又怎样啊… 还有人说什么因为左边没满流,所以右边满流… 第一问,求最小代价 由于最后要把每条边都去掉由于最后要把每条边都去掉由于最后要把每条边都去掉 去掉一条a−b的边,要么把a的出边去掉,要么把b的入边去掉去掉一条a-b的边,要么把a的出边去掉,要么把b的入边去掉去掉一条a−b的边,要么把a的出边去掉,要么把b的入边去掉 可以发现这不就是二分图吗??!!可以发现这不就是二分图吗??!!可以发现这不就是二分图吗??!! 我们把每个点

jziwjxjd的博客 584

大数据领域存算分离:教育行业的数据应用探索

在当今数字化时代,教育行业积累了海量的数据,如学生的学习记录、考试成绩、在线学习行为等。如何高效地存储、管理和分析这些数据,以挖掘其潜在价值,为教育决策、教学改进和学生个性化发展提供支持,成为教育行业面临的重要挑战。大数据领域的存算分离技术为解决这一问题提供了新的思路和方法。本文旨在探索存算分离技术在教育行业的数据应用,分析其原理、优势和实际应用场景,为教育行业的数据管理和分析提供参考。本文共分为十个部分。第一部分介绍背景,包括目的和范围、预期读者、文档结构概述和术语表;

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 813

【poj2125】Destroying The Graph 二分图最小点权覆盖集

DescriptionAlice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that Bob tries to destroy it. In a move he may take any vertex of the graph an

DQS的树洞 721

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

POJ 2125 Destroying The Graph 最小点权覆盖集

点击打开链接 Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6840   Accepted: 2162   Special Judge Description Alice and Bob play the f

代码改变世界,keep coding。 1410

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

POJ2125 Destroying The Graph(二分图最小点权覆盖集)

最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边。 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量为Y部点的权值,X和Y是原二分图中的边容量为INF。 这一题建二分图是这样的:把原图中的点拆成两个点分别作二分图的X部和Y部,一个入点u+一个出点u-,权值就是题目给的那两个;...

dengliugong3918的博客 179

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

poj 2125 Destroying The Graph(最小点权覆盖集)

【题意】 给出一个有向图,定义两种操作:w+(i)删掉i点的所有入边w-(i)删掉i点的所有出边,每种 操作都有对应的花费,问删掉所有边的最小花费。 【解答】 建图方法:对于每个点i,拆点为i,i+n,对于入边,从i+n想汇点T连边,值为入边花费;对于出边,从S向i连边,权值为出边花费。m组相连的边(x,y),从x向y+n连边, 费用INF。求出最小割。 然后是计算删除的

Ezereal的博客 724

POJ 2125 Destroying The Graph 二分图最小点权覆盖集

题目:http://poj.org/problem?id=2125题意:给定一个有向图,要把所有的边删掉,有两种操作,一种是把某个点的所有入边全部删掉,有一个相应的花费,另一种是把某个点所有的出边全部删掉,也有一个相应的花费,问删除所有边的最小花费是多少思路:因为每个点有入边和出边,因此可以看成两个点,点权分别为删掉入边和出边的相应花费,于是可以发现,本题就是一个二分图最小点权覆盖集模型。 建边方

弱智就要多努力 592

poj 2125 Destroying The Graph 最小点权覆盖集

#include<stdio.h> #include<string.h> #include<queue> #include<vector> using namespace std; const int N=1024; const int inf=1<<24;struct Edge { int from,to,cap,flow; };struct node { int num,st;

禅境花园 510

POJ 2125 Destroying The Graph(最小点权覆盖集求方案)

题目 模板题。 我们从SSS开始dfs\text{dfs}dfs以得出最小割的一组特解。 如果左边一排的点不能从SdfsS\text {dfs}Sdfs到,那么其左边的边就在最小割中。 如果右边一排的点能从SdfsS\text {dfs}Sdfs到,那么其右边的边就在最小割中。 AC Code\rm AC \ CodeAC Code #include<cstdio>...

Freopen的博客 140

告别PWM!用STM32串口轻松驱动幻尔16路舵机控制板(附完整工程代码)

本文详细介绍了如何通过STM32串口通信驱动幻尔16路舵机控制板,替代传统的PWM控制方案。文章包含硬件连接指南、通信协议解析、完整工程代码实现及高级应用技巧,帮助开发者高效实现多舵机协同控制,显著降低资源占用和代码复杂度。

weixin_30383279的博客 356

POJ2125 Destroying The Graph (最小点权覆盖集)(网络流最小割)

Destroying The Graph Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8158 Accepted: 2620 Special Judge ...

weixin_34352449的博客 89

POJ 2125 Destroying The Graph (二分图最小点权覆盖集+输出最小割方案)

题意 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少。 思路 很明显的二分图最小点权覆盖集。WA在输出最小割方案上。 【输出最小割方案】从源点S做一次DFS遍历,标记所有访问到的点,这些点就是S点集。然后对于每一条满流边,如果其两端点一个在S点集一个不在则该边就是此方案下的最小割边。 ...

weixin_30477293的博客 167

poj 2125 Destroying The Graph 最小点权覆盖集+拆点+求割边

Destroying The Graph Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7570 Accepted: 2423 Special Judge Description Alice and Bob play the following game....

weixin_30757793的博客 112

POJ 2125 Destroying The Graph (dinic求最小点权覆盖)

Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5865   Accepted: 1864   Special Judge Description Alice and Bob play the following gam

BehappyXiang的专栏 1111

「模板」·[最小割]最小点权覆盖——POJ 2125 Destroying The Graph

题目链接:http://poj.org/problem?id=2125 题意:给你一个n个点m条边的有向带环图,问删除所有的边的最小代价。删边的操作:选择一个点,删掉所有进入该点的有向边,支付wi,或删掉所有从该点出去的边,支付wo。并输出方案。 思路:由题意需要删除所有边,所以为最小点权覆盖。由于删除进入/出去的有向边的代价不同,所以要拆点。将n个点拆称2×n个,变成一个二分图,将原图中从u连...

凝望的博客 291
下一篇: ZOJ 3165 Party of 8g (最大点权独立集)
yang_bro
博客等级 码龄15年 37粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值