No.32 - POJ2125 - 关于最小割的割边或割点

802.11 NDP Sounding NDP Sounding1.NDP原理2.NDP 过程3.帧结构3.1 NDPA结构3.2 CBF帧 1.NDP原理 802.11n标准提供的波束成形技术,可以通过预先补偿发射天线的相位,让两条波束进行叠加以实现最好的效果 显式波束成形需要终端反馈信道信息: AP向STA发送探测数据(NDP: null data packet sounding) STA向AP反馈信道信息(Compressed beamforming) AP根据STA的反馈或自行计算的权重信息进行波束成形 2.NDP 过程 802. 阅读详情

简单描述一下题目:
一个有向图,每个点删除入边有个权值,删除出边有另一个权值。则删除所有边最小权值?

所以,一条边有两种删除方式,要么选择起始点删出边,要么选择终止点删入边。显然是求分配方案。
关于分配方案,自然想到网络流,图中拆点,分为入边点,和出边点,这样权值也分离了,原来的边按逻辑连接对应入边点,和出边点。

这里我犹豫了好久,点权怎么处理。

网络流点权是一定要转化成边权的,一般点权有两种处理方案:

1,拆点,连边权值表示点权。一般用于最小费用最大流,但这道题,S或T连接边权值为INF,因为边权是INF,这样网络优化一下,把拆出的点与ST融合,就是方案2的网络流图了。

2,新设源汇点连接该点,连边表示权值。这样就是最小割问题,求原图每条边是分配出边点集还是入边点集。


关于最小割的割边或割点:\red{关于最小割的割边或割点:}关于最小割的割边或割点:

最大流的流量就是最小割的开销,但S或T连接的满载边未必是最小割边,因为网络流有转嫁流量的性质,存在一种情况把大边的流量转嫁到小边,使所有小边满载,但边数量明显增加。

利用最小割的特性,用DFS搜索找S联通集,和T联通集的点,然后,点对应连接S或T的边就是割边。

// ShellDawn
// POJ2125
// No.32

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<math.h>
#define MM(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
//

#define maxn 105
int E[maxn*2][maxn*2];
int V[maxn*2];

int N,M;
int S,T;

bool BFS(int s){
    MM(V,0);
    queue<int> q;
    q.push(s);
    V[s] = 1;
    while(!q.empty()){
        int now = q.front();
        q.pop();
        for(int i=S;i<=T;i++){
            if(V[i] == 0 && E[now][i] > 0){
                V[i] = V[now] + 1;
                q.push(i);
            }
        }
    }
    if(V[T] > 0) return true;
    return false;
}

int DFS(int now,int minflow){
    if(now == T) return minflow;
    int flow = 0;
    for(int i=S;i<=T && minflow;i++){
        if(E[now][i] > 0 && V[i] == V[now] + 1){
            int f = DFS(i,min(minflow,E[now][i]));
            minflow -= f;
            flow += f;
            E[now][i] -= f;
            E[i][now] += f;
        }
    }
    if(flow == 0) V[now] = 1;
    return flow;
}

void FindP(int now){
    for(int i=1;i<T;i++){
        if(E[now][i] > 0 && V[i] == 0 ){
            V[i] = 1;
            FindP(i);
        }
    }
}

int main(){
    while(~scanf("%d%d",&N,&M)){
        S = 0; T = N+N+1; MM(E,0);
        int v;
        // 入点 1~N
        for(int i=1;i<=N;i++){
            scanf("%d",&v);
            E[i][T] = v; 
        }
        // 出点 N+1~N+N
        for(int i=N+1;i<=N+N;i++){
            scanf("%d",&v);
            E[S][i] = v;
        }
        while(M--){
            int a,b;
            scanf("%d%d",&a,&b);
            E[a+N][b] = INF;
        }
        int ans = 0;
        while(BFS(S)) ans+=DFS(S,INF);
        printf("%d\n",ans);

        MM(V,0);
        FindP(S);
        int cnt = 0;
        for(int i=1;i<=N;i++){
            if(V[i+N] == 0) cnt++;
            if(V[i] == 1) cnt++;
        }
        printf("%d\n",cnt);
        for(int i=1;i<=N;i++){
            if(V[i+N] == 0) printf("%d -\n",i);
            if(V[i] == 1) printf("%d +\n",i);
        }
    }
    return 0;
}
[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目 最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。 阅读详情

相关推荐

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.csdn.net/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1122

[AHOI2009]最小割 - 割边判定定理

题目描述 A,B两个国家正在交战,其中A国的物资运输网中有NN个中转站,MM条单向道路。设其中第i (1≤i≤M)i(1≤i≤M)条道路连接了(u,v,w) 两个中转站,那么中转站v 可以通过该道路到达u 中转站,如果切断这条道路,需要代价c 现在B国想找出一个路径切断方案,使中转站ss不能到达中转站tt,并且切断路径的代价之和最小。 小可可一眼就看出,这是一个求最小割的问题。但爱思考的小可可并不...

青烟绕指柔的博客 602

Qt6安装保姆级教程:从国内镜像下载到配置避坑指南(附清华/中科大源)

本文提供详细的Qt6安装与配置指南,重点介绍如何利用清华大学、中国科学技术大学等国内镜像源解决下载速度慢的问题。内容涵盖在线安装器获取、组件选择策略、环境变量配置以及常见编译与部署问题的排查方法,旨在帮助国内开发者高效、顺畅地完成Qt6开发环境搭建。

weixin_29281915的博客 633

最小割的必须割边和可行割边

ISAP+tarjan判断最小割的必须割边和可行割边

curry的博客 666

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 647

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

题目链接:http://poj.org/problem?id=2125 题意: 思路:将每个点i拆成两个点xi,yi,分别表示两种操作,每条有向边&lt;u,v&gt;连接&lt;xu,yv,INF&gt;,s向每个点连边&lt;s,xi,ai&gt;,每个点向t连边&lt;yi,t,bi&gt;。 #include &lt;iostream&gt; #include &lt;st...

weixin_34184158的博客 173

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

poj 2125 (最小点权覆盖)

题目链接:http://poj.org/problem?id=2125 题意描述:给你一张有向图,每个点有两个权值(w+,w-),w+表示删掉该点的所有入边所需要的花费,w-表示删掉该点的所有出边所需要的花费,问要删除所有的点需要的最少花费为多少? 分析:因为涉及到了

440

Linux下搭建J-Link调试环境:OpenOCD+GDB实战指南

嵌入式开发中,调试器是连接开发主机与目标硬件的关键桥梁,其核心原理是通过标准协议(如JTAG/SWD)访问芯片内部的调试模块。GDB作为通用的调试客户端,通过远程协议与调试服务器通信,而OpenOCD则扮演了协议转换与硬件驱动的角色,实现了调试命令的翻译与执行。这种开源工具链的组合,为开发者提供了高度的定制化与自动化能力,尤其适合需要与持续集成流程深度结合的复杂项目。在实际应用中,针对特定芯片(如ARM7TDMI)进行正确的内存控制器与时钟初始化是成功调试的前提,这常常涉及对板级支持包的深入理解。本文以S3

weixin_29889665的博客 333

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 618

POJ2125:Destroying The Graph

题目链接【题意】给一张有向图,现在要选择一些点,删掉图中的所有边。具体操作为:选择点i,可 以选择删除从i 出发的所有有向边或者进入i 的所有有向边,分别有个代价ini 和 outi,求最小的代价删掉所有边。并输出删除方案。【分析】一条边不是被入点删掉,就是出点。就可以拆点构二分图,然后最小割。 方案? 考虑残量网络,从S做BFS,那么对于左侧被选中的点,就是level值为0,及由S连向它的

Heret1c 422

完整复现YOLOv8:包括训练、测试、评估、预测阶段【本文源码已开源,地址在文章末尾】

(这里主要是在colab.research.google.com实现的,本地的配置也是类似的方法)YOLOv8是一种用于目标检测的深度学习算法。主要参考:https://github.com/ultralytics/ultralytics/blob/main/README.zh-CN.md。yolov8的权重:https://github.com/ultralytics/assets/releases。yolov8的文档:https://v8docs.ultralytics.com/

源代码杀手的博客 1万+

网络流(三) 最小边割与最小点割

网络流除了可以求图中的最大流,最小费用流,二分图完美匹配之外,还可以来求图的最小点割/边割集,再加上拆点法和建立源点汇点的使用,使得网络流可以灵活解决其他的建模问题。

这里是阿安的博客 6036

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最小割边与最小割点

最小割边 思路:将1到n的所有最短路都切断,求最小代价。先跑一遍迪杰斯特拉,然后再在最短路径上重新建图,就变成了在新图上将1到n的所有路径全部切断的最小代价,也就是最小割(边)。根据最大流最小割定理:最大流等于最小割,所以求最大流即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=200500; const ll inf=0x3f3f3f3f3f3f3f3f; #define fi

qq_45288870的博客 1083

VB摄像头监控

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

最小点割集(点连通度)

      无向(有向)图G中,给定源点s和终点t,至少要删去多少个点(具体一点,删哪些点),使得s和t不连通。这个问题就是点连通度,也叫最小点割集。      一般最小点割转化到最小边割上,将原图中的点v拆成v'和v'',且w(v,v'')=1。对于原图中的有向边(u,v),则有w(u'',v')=INF;若是无向边,则还要加上边:w(v'',v')=INF。然后求以s''为源点,t'为汇点的...

yangzhongmin21的专栏 2621

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

旅行商问题的手工运算及完整代码(TSP)

目录 1.问题描述 2.解空间树是排列树 3.算法描述 4.手工运算 第一步:找出每一行的最小值 第二步:找较短路径 第三步:比较大小 5.代码实现 (1)分支界限法 (2) 回溯法 1.问题描述 ·某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。 2.解空间树是排列树 3.算法描述 ·算法开始时创建一个最小堆,用于表示活结点优先队列。 ·堆中每个活...

qq_55168827的博客 6580

poj 2125(最小割)

题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连,边容量为w[i]+,如果i,j有边相连,则i与j+n连边inf.从而跑最大流求解。对于输出解决放案,我们可以在残余网络中进行dfs,从vs出发,对于那些i&lt;=n没有遍历到的点,说明被取走了,...

weixin_33875564的博客 172

旅行售货员问题(C++)

编译环境:Dev-C++ 分支界限法解旅行售货员问题的具体算法实现

m0_57443189的博客 3118

poj 2125 最小割解决 "最小点权覆盖问题" +输出解(割边集)

题意:给你一幅有向图, 对于点i删除所有进入该点的边就要支付费用W[i]+(情况1), 删除所有从该点出发的边就要支付费用W[i]-,问删除图中的所有边至少需要多少费用(情况2)。 分析:首先我们根据题意,选点就能删除一些边, 那么这可以看成是“用点去覆盖边”, 这里无非是把边分成了2类, 我们可以把原来的点进行拆点,那么就完完全全等价于“用点去覆盖边",如果支付费用都为1,那么这就是”最小点

Nicolas 2501

POJ2125 Destroying The Graph(最小割求割点)

Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8446   Accepted: 2725   Special Judge Description Alice and Bob play the following g

Jelly_acm的博客 544

poj2125 网络流

【题意】 给出一个有向图,定义两种操作:w+(i)删掉i点的所有入边w-(i)删掉i点的所有出边,每种 操作都有对应的花费,问删掉所有边的最小花费。 【解答】 我基于的想法是对于每个点,分拆成ai和bi,ai表示入度,bi表示出度。根据点度数的条件 建图,后来我发现我的建图方法和人家的最小点覆盖的思路是一样的!我猛然发现最小点 覆盖的思路更好理解。同时,我还看到了人家的有趣的分析:

AChunter的专栏 1008

POJ 2125 Destroying The Graph && Acwing 2325. 有向图破坏(拆点+最小权点覆盖集)

原题链接 POJ 2125:Destroying The Graph Acwing 2325:有向图破坏 题目大意 我们要删除一个有向图中的所有边,有两种删法,一是删除某点的所有入边,二是删除某点的所有出边,他们的费用不同,分别是W+和W-,我们要求一种方案,使得删除所有边的总代价最小。 思路 我们要删除某一条边<a,b>有两种删法,删除a的出边或是b的入边,我们肯定是要费用最小的那种删法,对于一个点他有两种属性,一是作为终点,二是作为起点,因此我们就想到了拆点,将一个点拆成a+和a-,分别表示

harry12138小白的博客 588

[POJ2125]Destroying The Graph 做题笔记

题目链接:http://poj.org/problem?id=2125拆点形成近似二分图,最大流等于最小割。 关键是判断割边。这里的割边代表“割点”,即拆掉点的入度或点的出度,可以用一遍dfs实现。#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const

mhlwsk的博客 537

【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的树洞 720

poj2125 Destroying The Graph

最小割

YHaX的博客 420
上一篇: No.31- POJ1469 二部图最大匹配模版题
下一篇: No.33 - POJ1523 邻接表Tarjan算法 找关节点
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值