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;
}



MIMIC-IV数据库中患者院内死亡的单因素生存分析 目的 由易到难,对mimic-iv的查询进行实际操作,体现先前文章中提到的mimic-iv数据查询的规律。 数据分析计划 死亡,是重症患者最重要的结局指标,在MIMIC数据库中收录了院内死亡的数据,以及进出ICU的时间(和进出医院的时间),所以我们可以获得是否死亡,以及从入ICU(或入院)到死亡发生之间的时间,有了这两个指标,我们可以通过Cox单因素(参数和非参数)模型来观察ICU(和医院)内死亡的趋势,以及某个变量(比如,性别和种族等)对死亡趋势的影响,以为后续的分析奠定基础。 数据的获取 我们需要数个变 阅读详情

相关推荐

huggingface 镜像站推荐

在做 Ai 应用开发或者学习的时候,我们经常需要下载各种模型,而 huggingface 的模型下载速度很慢或者根本就连不上,这里推荐一个 huggingface 的镜像站,速度很快,可以大大提高我们的效率。

t951984189的博客 1万+

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

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

不慌不忙、不急不躁 3896

高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析

本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。

weixin_29065959的博客 464

A Plug for UNIX UVA - 753

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

zpf1998的博客 228

2d游戏地图编辑器_[U3D]基于MarchingCubes实现的War3Editor 地表/悬崖编辑器

花了几天时间研究清楚Marching cubes后,发现这个方法是一个非常适用于地图编辑,网格编辑,procedural 生成的工具。最大的优点有着较好的边缘,表面处理。然后我用U3D写了一个悬崖/地表的编辑器。其中使用到了Marching Cubes的2.5D,2D两种降维的方法。talk is cheap,让我看效果!DemoEditor展示https://www.zhihu.com/vide...

weixin_42504649的博客 1178

复信号的调制与解调(基带)

Digital modulation methods can be considered as digital-to-analog conversion and the corresponding demodulation or detection as analog-to-digital conversion. 数字调制可以看成是数字到模拟的变换,同样,数字解调也可以看作是模拟向数字的转换。

JonTargaryen的博客 1万+

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

Python多版本共存指南:用CMD命令一键切换3.6和3.8解释器(含pip使用技巧)

本文详细介绍了在Windows CMD环境下实现Python多版本(如3.6和3.8)共存与一键切换的完整方案。通过文件重命名策略、环境变量优化和自定义脚本,开发者可快速切换Python解释器版本,并管理各版本独立的pip依赖库,确保项目环境隔离与兼容性。

weixin_29035405的博客 423

第十一章例题 UVa753 A Plug for UNIX

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

JXUFE_ACMer的博客 330

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

汽车级智能栅极驱动器深度解析 | 连载03:功能框图与工作模式详解

在前两期连载中,我们分析了DRV871x-Q1的产品架构、引脚配置和电气特性。本期我们将深入探讨DRV871x-Q1的功能框图和工作模式,这是理解芯片内部工作机制的关键。通过分析功能框图,我们能够清晰地了解各功能模块之间的关系和信号流向;通过工作模式分析,我们能够掌握芯片在不同应用场景下的配置方法。这些知识对于系统设计和故障排查都至关重要。

VehSwHwDeveloper的博客 1098

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

【数字IC设计】芯片设计中的RDC

在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。

qq_40268672的博客 2184

UVa 753 A Plug for UNIX

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

寂静山林 194

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

题解 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

efm32 入门.pdf

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

uva753 A Plug for UNIX

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

dengdouweng1282的博客 140

NTscan扫描工具

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

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的博客 268

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、付费专栏及课程。

余额充值