No.26 - POJ1815 最小割点

数据仓库建模的步骤-从需求分析到模型优化的全面指南 数据仓库建模是一个系统化的过程,旨在设计和构建一个高效、可扩展的数据存储和分析环境。它的目标是将来自不同源系统的数据整合到一个统一的、面向主题的、随时间变化的数据集合中,以支持企业的决策制定过程。数据仓库建模不仅仅是创建表格和定义关系,它更是一门艺术,需要平衡业务需求、技术限制和未来的可扩展性。提供快速的查询性能支持复杂的分析需求适应业务的变化和增长保持数据的一致性和准确性接下来,让我们深入探讨数据仓库建模的每个主要步骤。 阅读详情

网络流求最小割点,每个点分裂为入点和出点,边权为1

注:S,T分裂为边权为INF的两个点
出点到其它入点边权为INF

// ShellDawn
// POJ1815
// No.26

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

#define maxn 205
int N,S,T;
int G[maxn][maxn];
struct Edge{
    int to;
    int v;
    int rvs;
    int pre;
};
Edge E[maxn*maxn*4];
int pre[maxn*2];
int cnt = 1;
int V[maxn*2];

void addE(int from,int to,int v,int rvs){
    E[cnt].to = to;
    E[cnt].v = v;
    E[cnt].rvs = rvs;
    E[cnt].pre = pre[from];
    pre[from] = cnt++;
}

void build(){
    MM(pre,0);
    cnt = 1;
    for(int i=1;i<=N;i++){
        if(G[i][i] > 0){
            if(i == S || i == T){
                int t = cnt;
                addE(i,i+N,INF,t+1);
                addE(i+N,i,0,t);
            }else{
                int t = cnt;
                addE(i,i+N,1,t+1);
                addE(i+N,i,0,t);
            }
        }
    }
    for(int i=1;i<=N;i++){
        if(G[i][i] == 0) continue;
        for(int j=1;j<=N;j++){
            if( i == j || G[i][j] == 0 || G[j][j] == 0) continue;
            int t = cnt;
            addE(i+N,j,INF,t+1);
            addE(j,i+N,0,t);
        }
    }
}

void printE(){
    for(int i=1;i<=N*2;i++){
        printf("ID:%d ",i);
        for(int j=pre[i];j!=0;j=E[j].pre){
            printf("->%d (%d) ",E[j].to,E[j].v);
        }
        puts("");
    }
}

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

int DFS(int now,int minflow){
    if(now == T+N) return minflow;
    int flow = 0;
    for(int i=pre[now]; i!=0 && minflow ; i=E[i].pre){
        if(E[i].v > 0 && V[E[i].to] == V[now] + 1){
            int f = DFS(E[i].to,min(minflow,E[i].v));
            flow += f;
            minflow -= f;
            E[i].v -= f;
            E[E[i].rvs].v += f;
        }
    }
    if(flow == 0) V[now] = 0;
    return flow;
}

int main(){
    //freopen("A.txt","r",stdin);
    scanf("%d%d%d",&N,&S,&T);
    for(int i=1;i<=N;i++){
        for(int j=1;j<=N;j++){
            scanf("%d",&G[i][j]);
        }
    }
    if(G[S][T] > 0){puts("NO ANSWER!");return 0;}
    build();
    //printE();
    int maxflow = 0;
    while(BFS(S)) maxflow += DFS(S,INF);
    printf("%d\n",maxflow);
    queue<int> q;
    for(int i=1;i<=N && maxflow;i++){
        if(i == S || i == T) continue;
        G[i][i] = 0;
        build();
        int flow = 0;
        while(BFS(S)) flow+=DFS(S,INF);
        if(flow < maxflow){
            q.push(i);
            maxflow -- ;
        }else G[i][i] = 1;
    }
    while(!q.empty()){
        printf("%d",q.front());
        q.pop();
        if(q.empty()) puts("");
        else printf(" ");
    }
    return 0;
}
药物代谢仿真软件:PKSim_(6).案例研究与实践应用 通过本章的案例研究和实践应用,我们展示了如何利用PKSim软件构建药物动力学模型、进行参数估计、仿真预测和结果分析。这些方法不仅有助于优化药物代谢研究过程,还可以在药物研发中提供重要的数据支持。通过模型的构建和验证,我们可以更好地理解药物在体内的动态变化过程,为临床试验和药物治疗提供科学依据。 阅读详情

相关推荐

AutoDock Vina 对接计算(大批量)

AutoDock Vina是一种用于计算生物分子之间相互作用的计算工具,主要用于蛋白质和小分子(通常是潜在药物分子)之间的对接研究。它可以用于虚拟筛选、药物设计和生物分子结合位点的预测等多个应用领域。

MurphyStar的博客 1万+

poj 1815(最小割+枚举)

题意:有n个人,他们两两之间能够联系的要求是直接能够联系或者能同时联系到某一个人,现在给出A B两人,问最少删除多少个人后,A B无法联系,如果有多种方案,输出字典序最小的 算法:枚举+最大流 每个点拆点,之间连一条容量为1的弧,保证每个人最多被删掉一次 新增源点s汇点t,s只与x相连,t只与y’相连,容量均为+oo 如果i能与j联系,则在I’与J之间连一条容量为1的弧

Weiguang_123的专栏 852

行人重识别技术(Re-ID)概述、研究现状以及相关数据集下载

ReID技术概述什么是ReID一般流程Re-ID特点研究现状难点数据集reid常用数据集以及下载链接评价指标实现思路研究方式基于表征学习基于度量学习基于局部特征全局特征切片姿态基于视频序列RQEN基于GANCamStyleDG-NetGAN总结对比未来方向建议文献 什么是ReID 行人重识别是指利用计算机视觉技术,判断在不同时间段、不同监控下出现的行人图像是否属于同一人员的技术。行人重识别是最近几年在视频分析领域下热门的研究领域,可以看做是人脸识别应用的拓展。现在大街上的监控较多,由于设备质量、成像光线、.

留缘的博客 1万+

POJ - 1815 - Friendship(网络流-拆点建图)

题目:POJ-1815 题意:在一个给定的无向图中至少应该去掉几个顶点才干使得s和t不联通。 题解: 假设s和t直接相连输出no answer。 把每一个点拆成两个点v和v'',这两个点之间连一条权值为1的边(残余容量) v和v''各自是一个流进的点。一个流出的点。 依据求最小割的性质。权值小的边是可能被选择的(断开的)。 加入源点st=0和汇点en=2*n+1,源点与s连权值为in...

Rotepad的博客 436

vmware虚机Debian10磁盘空间无损扩容

该方法不适和LVM的磁盘管理 备份 一定要先做备份,虚机中直接创建一个快照备份 vm上增加空间 初始给的40G空间不够需要扩容,vm那给系统添加到100G 重新分区 查看当前分区情况 sudo fdisk -l

lms99251的博客 7454

rv1126平台spi屏调试

st7789v2 i2c调试

zuoanyouzhuan_的博客 2037

POJ 1815 (最小割的点集)

题意 : 从s到t的连通图中,最少删除多少个点,可以使s和t不连通,也就是求一个最小点割集

LSS 658

simulink调用C代码函数-C Caller模块

simulink中如何调用写好的C代码函数?使用C Caller模块调用C代码。

weixin_40531919的博客 5669

最小割点【洛谷P1345】

传送门:https://www.luogu.org/problemnew/show/P1345 最小割问题,大家应该听说过,最大流最小割吧(没听说过的读完这句话应该听说了),既然要求最小割,那么我们就直接dinic跑一下最大流就完事了。 有人要问了,你说的轻巧,我写了dinic怎么WA了??? 这个题是最小割【点】啊! 平常的dinic跑最大流求最小割那割的是边。 :那怎么割点啊,看起来...

KIKO_caoyue的博客 663

推荐11个顶级的Claude Code Skills

ClaudeCode的Skills系统为程序员提供了11个强大的AI辅助工具,包括代码审查、重构建议、单元测试生成、API文档自动生成、性能分析、安全扫描、数据库迁移脚本生成、CI/CD配置、依赖管理、ER图生成和日志分析等功能。这些"技能包"可大幅提升开发效率,从代码质量到协作沟通全方位优化工作流程。用户可根据需求选择2-3个核心功能开始尝试,熟练后还可自定义Skills。该系统需要配合Anthropic的API使用,建议先在小型项目测试再应用于核心业务。

分享AI、区块链技术及应用,未来已来 1849

红绿灯背后的数学:如何用Java算出“黄金绿灯时间“?

本文探讨了城市交通信号灯配时优化的数学原理与Java实现方法。文章首先分析了信号灯配时不合理导致的交通问题,指出精确计算绿灯时长的重要性。核心内容包括:1)基于M/M/1排队模型建立车流量数学模型,通过优化算法最小化总等待时间;2)使用Java实现信号灯优化控制器,采用梯度下降法动态调整绿灯时长。文中提供了完整的Java代码实现,包括信号灯控制器基类和优化控制器类,采用原子类保证线程安全,并详细解释了关键算法原理和实现细节。该方案可为城市智能交通系统提供理论支持和技术实现参考。

墨夶的博客 1345

最小点割集(点连通度)

      无向(有向)图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

SAP物料主数据归档详解(物理删除)

顾问们的回答肯定的统一的不能,只能打上删除标记。物料设置好需要删除的物料号这里我们需要删除的物料是AG88,其中,若不选“考虑无删除标记的物料”,需要将需要归档的物料MM06打删除标记。平时在操作系统过程中经常会不小心创建出很多无用的物料主数据,但是系统只能通过MM06打上删除标记,但是物料最终在系统中还是可以查询到的。6、执行已设置变式的归档程序,执行完毕,点下图中的“Job”,每次执行完归档程序会产生两条作业。然后设置好开始的参数和假脱机的参数,三个都是绿灯就可以执行归档的操作,物理上删除物料主数据。

我小时候很黑的博客 5523

poj 1815 Friendship 最小割 拆点 输出字典序

题目链接:http://poj.org/problem?id=1815 题意:A与B能通信当且仅当A知道B的电话号或者A知道C的电话号且C与B能通信。若A知道B的电话号,那么B也知道A的电话号。 然而不好的事情总会发生在某些人身上,比如他的电话本丢了,同时他又换了电话号,导致他跟所有人失去联系。 给出N个人之间的通信关系以及S和T,问最少几个人发生不好的事情可以导致S与T无法通信,并输出这些...

weixin_30236595的博客 136

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ1815 Friendship(字典序最小最小割割边集)

看了题解。当时也觉得用邻接矩阵挺好写的,直接memset;然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic。。 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就是属于某个最小割;接下来一直重复下去,直到得到一个割边集,而它自然是字典序最小的。 我在每次某条边容量减1后都重新计算一遍最大流,简单。。其实我知道是有这么一回事,把边容量减1后可以利用...

dengliugong3918的博客 171

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

这里是阿安的博客 6036

poj 1815 最小点割集

最小点割集求解方法: 1.有向图:把一个点拆成(i, i+N)2个点,之间容量为1。如果i, j 2个点在原图中联通,则将i+N,j相连,容量为无穷大。然后求最小割,可见被最小割割到的都是容量是1的边,(如果割到一条INF,说明没有最小点割集。)而且那些边必将连着i,i+N,于是i就是被割的点。 2.无向图:把一个点拆成(i, i+N)2个点,之间容量为1。如果i, j 2个点在原图中

Frozensmile的博客 953

最小割

最小割 什么是最小割? 一个割就是一组边的集合,将给集合边从图中边集合中移除,那么图被分割为两个部分,这两个部分之间没有任何边连接。 如何找到这个最小割? 当一个图被割分成两个部分时,不再存在S到T的通路,所以割的代价必定大于等于图的最大流(这个需要添加额外说明吗?应该不需要吧,算是非常明显的结论了吧)。那么也就是说,割的代码最小不能小于图的最大流,也就是割的代价等于图的最大流。 例题1 题意:每...

qq_43653111的博客 4544

P1345 最小割

由题可知,已知无限图及起止点,求最小割点。 回忆紫书上的知识:最大流最小割,这里的割指的是割边 对于这个题,我们把每一个点拆成左右相连的两部分就等同于把最小割点问题转化成了最小割边问题。 证明: 如A图,假设一个点有两个乃至更多个相邻的割边,那么这个图的割边可以简化为图B所示的形式。以此推理,最后所有的割边都可以转换为左右点间的边。 至于无向图转有向图的技巧可以看这张图片 #include ...

康宇的博客 245

poj 1815(最小割、割集)

题目链接:http://poj.org/problem?id=1815 思路:题目要求是剔除多少个点,可以将其转化为剔除多少条边,因此需要拆点,将点i拆成i,i+n,便容量为1,表示每个人起的传递作用只能是一次。然后就是枚举了,删除某条边,如果求出的最小割比原来的要小,说明减少的是割边集。 1 #include&lt;iostream&gt; 2 #include&lt;cs...

weixin_34349320的博客 281

poj 1815(最小割 割集)

N个人,告诉一系列谁有谁的联系方式。 问题:指定S,T两个人,问除这两个人以外,最少踢掉几个人,可以使得这两个人无法联系的上。给出字典序最小的一种方案。 拆点。因为题目要求的是剔除多少个点。我们要把他转换成剔除多少条边。所以要拆点。 枚举删除每一条边,其余边与原图一致,判断新图的最小割是否比原图减少。减少说明是割集的边。 1 // File Name: 1815.cpp 2 /...

weixin_30835933的博客 166

POJ 1815 Friendship 最小割

题目链接:https://vjudge.net/problem/POJ-1815 题意:求s点到t点,最少去掉几个点使得他们不连通。如果无解输出NO ANSWER! 解法: #include #include #include #include using namespace std; const int maxn = 1010; const int maxm = 100010;

I good vegetable a! 522

POJ 1815 Friendship (最小点割集/最小割)

题意:给出每个朋友之间的联系表,如果a联系b,b联系c,那么a是可以联系c的。问最少要去掉多少个朋友才能使得s无法和t联系上。如果有一样的方案输出字典序最小的。 解法:很像最小割有木有?但是这次不是边而是点,那么我们拆点不就好了。跑一次最大流发现一开始流量为f,那么我们从1到n枚举点,试着把第i个点删去看看流量是否有变化。如果有变化,说明第i个点在最小点割集里面。记录一下这个点,并且以后不再进入

llzhh的博客 375

最小割边与最小割点

最小割边 思路:将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

POJ1815 Friendship(求最小割点 dinic)

传送门:http://poj.org/problem?id=1815 题意就是求s点到t点,最少去掉几个点使得他们不连通。如果无解输出NO ANSWER!        因为最小割只能求割掉几条边的解,我们要求的是割掉几个点。那么我们可以这样考虑:把每个点拆成入点和出点。入点->出点权值为1。那么割掉这条边就相当于割掉这个点了,就能把这题转化成最小割。那么原来的边,我们是不希望去割它的,所以我们

xtttgo的博客 1652
上一篇: No.25 - POJ3308 实数网络流
下一篇: No.27 - POJ2396 上下界网络流
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值