UVA 753 A Plug for UNIX

UVA - 753:A Plug for UNIX UVA-753:A Plug for UNIX 来源:UVA 标签:图论->网络流->最大流问题 参考资料: 相似题目: 题目 You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet... 阅读详情

n个插板,m台设备,k种转换器,一开始WA了一次,原来是忘了每种转换器的数目时无限多的,建立边时需要注意 和UVA 11045 My T-shirt suits me  有点类似,稍微复杂一点,并且需要查询 匹配再添加相应的边。

大体思路:

将每台设备拆分成两点,建立容量为1的边,并且建立从源点0到该设备拆分点的一条边,容量为1;每个转换器同样拆分建立容量无限的边,然后插板拆分,建立容量为1的边,再把插板拆分后的点连接到汇点1,建立容量为1的边。

接下来便是查找相应匹配接口, 如对设备,需要查找能够和它的插口匹配的转换器和插板,对转换器则需要查找匹配其他转换器和所有的插板,对所有查找到的匹配建立相应的边,容量为1。

然后利用ISAP求解0-->>>1的最大流即可。

似乎对这样的小数据 ,spfa算法似乎能够快很多。

代码:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <cctype>
#include <queue>
#include <algorithm>
#include <cmath>
#define esp 1e-6
#define inf 0x0f0f0f0f
#define print(a) printf("%d\n", (a));
#define bug  puts("(****");
#define judge  freopen("in.txt","r",stdin);
using namespace std;
#define N 10000
#define M 400000
struct EDGE
{
    int i, c;
    EDGE *next, *ani;
} *Edge[N], E[M];
int Dfn[N], Now[N], cnt;
typedef struct
{
    char a[100];
    char b[100];
    int type;
} sft;
sft node[N];
int n, m, k, src, sink;
void add(int i, int j, int c, EDGE &e1, EDGE &e2)
{
    e1.i = j, e1.c = c, e1.next = Edge[i], e1.ani = &e2, Edge[i] = &e1;
    e2.i = i, e2.c = 0, e2.next = Edge[j], e2.ani = &e1, Edge[j] = &e2;
}
void init(void)
{
    memset(Edge, 0, sizeof(Edge));
    src = cnt = 0;
    sink = 1;
}
bool f(int i, int j)
{
  return !strcmp(node[i].b, node[j].a);
}
int ISAP(int s, int end, int flow)
{
    if(s == end)
        return flow;
    int i, tab = n-1, vary, now = 0;
    for(EDGE *p =Edge[s]; p && flow - now; p = p->next)
        if(p->c)
        {
            if(Dfn[s] == Dfn[i = p->i] + 1)
                vary = ISAP(i, end, min(flow - now, p->c)),
                p->c -= vary, now += vary, p->ani->c += vary;
            if(p->c)
                tab = min(tab, Dfn[i]);
            if(Dfn[src] == n)
                return now;
        }
    if(now == 0)
    {
        if(--Now[Dfn[s]] == 0)
            Dfn[src] = n;
        Now[Dfn[s] = tab +1]++;
    }
    return now;
}
int Max_flow(int s, int end)
{
    memset(Dfn, 0, sizeof(Dfn));
    memset(Now, 0, sizeof(Now));
    Now[0] = n;
    int ret = 0;
    for(; Dfn[s] < n;)
    {
        ret += ISAP(s, end, inf);
    }
    return ret;
}
int main(void)
{
    int T;
    for(int t = scanf("%d", &T); t <= T; t++)
    {
        init();
        int ct = 1;
        for(int i = scanf("%d", &n); i <= n; i++, ct++)
        {
            scanf("%s", node[ct].a);
            node[ct].type = 1;
            strcpy(node[ct].b, node[ct].a);
            add(2*ct^1, sink, 1, E[cnt],E[cnt + 1]);
            cnt += 2;
            add(2*ct, 2*ct^1, 1, E[cnt], E[cnt + 1]);
            cnt += 2;
        }
        for(int i = scanf("%d", &m); i <= m; i++, ct++)
        {
            scanf("%*s%s", node[ct].a);
            node[ct].type = 2;
            strcpy(node[ct].b, node[ct].a);
            add(0, 2*ct, 1, E[cnt], E[cnt + 1]);
            cnt += 2;
            add(2*ct, 2*ct^1, 1, E[cnt], E[cnt + 1]);
            cnt += 2;
        }
        for(int i = scanf("%d", &k); i <= k; i++, ct++)
        {
            scanf("%s%s", node[ct].a, node[ct].b);
            node[ct].type = 3;
            add(2*ct, 2*ct^1, inf, E[cnt], E[cnt + 1]);
            cnt += 2;
        }
        for(int i = n + 1; i <= n+m+k; i++)
            for(int j = 1; j <= n+m+k; j++)
                if(i - j && node[j].type != 2)
                {
                    if(f(i, j))
                        add(2*i^1, 2*j, 1, E[cnt], E[cnt + 1]),
                            cnt += 2;
                }
        n = 2*n+2*m+2*k+2;
        int ans = Max_flow(src, sink);
        ans = m - ans;
        if(t - 1)
           puts("");
        printf("%d\n",ans);
    }
    return 0;
}



inferCNV包安装问题及解决办法 InferCNV是一个由broad研究所开发的,利用单细胞转录组数据分析肿瘤细胞拷贝数变异(CNV)的工具。基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。 先贴一个官方安装说明: 官方infercnv安装说明 安装infercnv包: if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager: 阅读详情

相关推荐

CGAL-5.6的安装与编译(Win10+vs2022+CGAL-5.6+Boost1.82.0)

CGAL是Computational Geometry Algorithms Library(计算几何算法库)的缩写,C++的高效算法库。CGAL只是一个头文件库(从5.0版本开始),这意味着CGAL无需编译,只需安装好CGAL的依赖项即可。CGAL5.6。

baidu_34931359的博客 3902

uva 753 - A Plug for UNIX(网络流最大流)

题目链接:uva 753 - A Plug for UNIX 题目大意:给出n,有n种插座;给出m,表示有m种电器,给出电器名以及插头的类型;给出k,表示有k种转接器,给出可以桥接的插头和插座。 问说最少有多少个电器没有插座用。 解题思路:网络流,问题是怎样建图。我的做法是将0做为起点s,与所有的插座建立一条边,容量为1,然后再将所有的电器与终点t建立一条边,容量为1;然后将转

不慌不忙、不急不躁 3896

告别Win11睡眠假死:深入解析Modern Standby S0与S3冲突及注册表修复方案

本文深入解析了Windows 11中Modern Standby(S0)与传统睡眠(S3)模式的冲突,该冲突是导致电脑睡眠后出现假死、断网等问题的根源。文章提供了通过修改注册表键值(PlatformAoAcOverride)强制启用稳定S3睡眠的终极修复方案,并附有详细诊断步骤与避坑指南,帮助用户彻底解决睡眠故障。

ol789012的博客 823

A Plug for UNIX UVA - 753

问题 分析 添加两个节点,一个源节点,一个宿节点 解法1:首先用floyd算出所有的转换器之间的连接关系,然后将插头和插座看作点,转换器作为边,容量是INF,连接源点和每个插头,每个插座和宿节点,容量是1,计算最大流量 解法2:不适用Floyd,直接构图,每个出现过的插头或者插座都看作一个节点,将转换器看作边,容量INF,添加源节点,宿节点 解法1: EK : // // Created by Z...

zpf1998的博客 228

UE5实战技巧:TextRender高效集成中文字体与材质优化

本文针对UE5中TextRender组件显示中文的常见问题,提供了一套完整的实战解决方案。详细讲解了如何通过手动创建字体资产、精准控制字符集来优化性能,并重点介绍了通过调整材质中的Lerp节点参数(如设为-85, 92)来解决中文字体显示残缺和边缘模糊等核心难题,帮助开发者实现高效且美观的中文文本渲染。

weixin_28040125的博客 379

栅极驱动电路设计(一)

SiC驱动电路设计需满足更高标准,重点包括:驱动电压需18~20V开通、-3~-5V关断;栅极电阻优选5~10Ω以平衡开关性能与可靠性;必须集成欠压保护(阈值11~15V)和快速短路保护。多电平驱动控制通过动态调节栅压和驱动强度优化性能,如前期弱驱动抑制振荡,后期强驱动降低损耗。以NCE120ED65VTP4为例,栅压从18V提升至20V可使导通损耗降低15%。相比传统方案,有源驱动(含数字分段和模拟闭环控制)能更灵活地提升开关速度与效率。

嵌入式老牛的博客 449

UVA753 A Plug for UNIX 题解

题目描述: 有 nnn 个插座,mmm 个设备和 k(n,m,k≤100)(n,m,k≤100)k (n, m, k \leq 100)(n,m,k \leq 100)k(n,m,k≤100)(n,m,k≤100)种转换器,每种转换器有无限多。已知每个插座的类型,每个设备的插头类型,以及每种转换器的插座类型和插头类型。插头和插座类型都用不超过 2424 个字母表示,插座只能插到类型名称相同的插座中。 例如,有 44 个插座,类型分别为 A,B,C,D;有 5 个设备,插头类型分别为 B,C,B,B,X;还有

weixin_39412108的博客 236

目标检测基础

目标检测是计算机视觉的核心任务,需同时对图像中的物体进行定位与识别。传统方法存在速度慢、精度低等问题,而深度学习显著推动了该领域发展,使实时高精度检测成为可能。检测的核心是为每个物体预测边界框坐标和类别标签。为实现高效检测,引入了锚框机制,通过预设多尺度、多宽高比的候选区域,缩小预测偏移量,提升定位精度。训练时,通过计算锚框与真实边界框的交并比 (IoU) 确定正负样本,并基于此生成类别标签和坐标偏移量作为监督信号。该方法提升了检测器对多尺度目标和复杂场景的鲁棒性。

盼小辉丶的博客 2743

第十一章例题 UVa753 A Plug for UNIX

       “完全不知,往日为何,能与我……” 好吧我想说完全不知道为什么我觉得这几天对图论的学习都很有意思,学起来又酷又炫的~ 刘汝佳大神的源码我会放在后面。 /*SE:wn------王宁*/ /*回过头去学二分图匹配的匈牙利算法,才发现原来这一题就是二分图匹配啊 关键的一点就是这个转换器是给带插头的设备使用的 有点,有边——int n,m; 要知道和点连接的边——void add...

JXUFE_ACMer的博客 330

【PCB专题】Allegro导出3D文件

Allegro中如何导出3D文件,有没有一键导出操作?

一点硬件 4987

论文阅读-Whisper语音识别(OpenAI)

Whisper 是一个自动语音识别(ASR,Automatic Speech Recognition)系统,OpenAI 通过从网络上收集了 68 万小时的多语言,其中11万小时覆盖96 种语言,12万小时的语言标号为英语,用多任务(multitask)监督数据对 Whisper 进行了训练。

一位不是很硕的鉴伪方向硕士 6366

A Plug for UNIX UVA - 753(网络流)

A Plug for UNIX UVA - 753 题意&&思路: 基本和这道差不多传送门里的poj1087 AC #include <iostream> #include <vector> #include <cstring> #include <queue> #include <cstdio> #include <map> #include <string> #include <algorithm

qq_45377553的博客 151

FFTW3库在Windows中的安装和使用

Windows 32位平台下载:FFTW Installation on Windows。

weixin_45397344的博客 951

UVa 753 A Plug for UNIX

本题通过构建有向图表达适配器转换关系,利用传递闭包得到插座与插头之间的可达性,进而转化为二分图最大匹配问题,使用最大流算法求解。关键点在于正确理解适配器的方向(插头类型到插座类型),并考虑适配器串联的情况。由于数据规模小,BFSBFS求传递闭包和算法均能高效运行。输出结果时注意每个测试用例之间输出空行。该解法清晰且具有通用性,适用于类似设备与接口匹配的问题。

寂静山林 194

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

题解 UVA753 【UNIX插头 A Plug for UNIX】

题目简述 有 n 个插座,m 个设备和 k (n, m, k ≤ 100) 种转换器,每种转换器有无限多。已知每个插座的类型,每个设备的插头类型,以及每种转换器的插座类型和插头类型。插头和插座类型都用不超过 2424 个字母表示,插座只能插到类型名称相同的插座中。 例如,有 4 个插座,类型分别为 A,B,C,D;有 5 个设备,插头类型分别为 B,C,B,B,X;还有三种转换器,分别是 B-&g...

weixin_30762087的博客 170

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

uva753 A Plug for UNIX

网络流的问题一般都会加S,T! 网络流init参数一般为节点数(包括S,T) maxn为点数+一点(注意可能加点,拆点...) 把插头看做结点,增加S,T链接设备和插头(容量为1),转换器作为边(容量无穷大),套模板。用的是紫书第二种方法,因为更喜欢思维直接一点的方式。 读取输入时用一个ID函数方便了建图。 int ID(const string& s) { ...

dengdouweng1282的博客 140

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

UVA 753 A Plug for UNIX

最大流解决 。 设置源点 0,连接所有设备(device) 。设备-插头 -汇点 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include &l...

deko2014的博客 95

POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流) Description You are in cha...

dipinzhu4111的博客 358

uva 753 A Plug for UNIX

uva 753 A Plug for UNIX 网络流 最大匹配

@fei 477

UVa 753 A Plug for UNIX EK算法即可

You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow of information and ideas on the Internet as cumbersome and bureaucratic as po

苦鬼·。 275

UVA, 753 A Plug for UNIX

题意:  4 4个插座,下面是名称,不一定时单字母,可能是字符串  A  B  C  D  5 5个设备,名称 插头  laptop B  phone C  pager B  clock B  comb X  3 3种转换器 ,个数无限  B X  X A  X D  问最少设备不能使用的数量  建立最大流,超级源点连接所有的设备,超级终点连接所有的插座,设备插座

哎哟不错哦的博客 472

uva 753 A Plug for UNIX (最大流)

uva 753 A Plug for UNIXYou are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 1024

UVA753 A Plug for UNIX

C - A Plug for UNIX   You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the f

Oops的博客 269

UVa753 A Plug for UNIX

题意:有n个插座,m个设备,k种适配器,

A Cube Master 510
上一篇: UVA 11045 My T-shirt suits me
下一篇: POJ March of the Penguins
rootial
博客等级 码龄15年 2粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值