首页 > 其他分享 >CF843E Maximum Flow

CF843E Maximum Flow

时间:2024-07-28 11:53:38浏览次数:17  
标签:head ver int Flow Maximum tot dep edge CF843E

考虑到最小割一定是满流,此时最小割边数就是答案。

对于 \(g_i=0\),连接 \((u_i,v_i,inf)\),没有流量则一定可以走到,还需要防止隔断;对于 \(g_i=1\),连接 \((u_i,v_i,1),(v_i,u_i,inf)\),该边有流量则反向边一定有残余容量,且如果没满流,那么 \(u_i\) 可以到达 \(v_i\),否则就选择它假如最小割并认为它满流。

对于方案,直接上下界网络流跑有流边的方案,也就是下界为 \(1\),上界为 \(inf\),此时每条边的流量就是它此时的流量(注意加上下界),如果它是我们选定的最小割,则容量为它流量,否则为 \(inf\)。

#include<bits/stdc++.h>
using namespace std;
int n,m,s,t,tot=1,flow,maxflow,es[1001],a[1001],b[1001],g[1001],vis[301],dep[301],head[301],now[301],nex[30001],edge[30001],ver[30001];
queue <int> q;
void add(int u,int v,int w){
    ver[++tot]=v,edge[tot]=w,nex[tot]=head[u],head[u]=tot;
    ver[++tot]=u,edge[tot]=0,nex[tot]=head[v],head[v]=tot;
}
bool bfs(){
    memset(dep,0,sizeof(dep));
    while(q.size()) q.pop();
    q.push(s);
    dep[s]=1;
    while(q.size()){
        int x=q.front();
        q.pop();
        for(int i=head[x];i;i=nex[i]){
            if(edge[i]&&!dep[ver[i]]){
                q.push(ver[i]);
                dep[ver[i]]=dep[x]+1;
                if(ver[i]==t) return true;
            }
        }
    }
    return false;
}
int dinic(int x,int flow){
    if(x==t) return flow;
    int rest=flow,k;
    for(int i=now[x];i&&rest;i=nex[i]){
        now[x]=i;
        if(edge[i]&&dep[ver[i]]==dep[x]+1){
            k=dinic(ver[i],min(edge[i],rest));
            if(!k) dep[ver[i]]=0;
            rest-=k;
            edge[i]-=k;
            edge[i^1]+=k;
        }
    }
    return flow-rest;
}
void dfs(int x){
	vis[x]=1;
	for(int i=head[x];i;i=nex[i]) if(!vis[ver[i]]&&edge[i]) dfs(ver[i]);
}
int main(){
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&a[i],&b[i],&g[i]);
		if(g[i]) add(a[i],b[i],1),add(b[i],a[i],1e6);
		else add(a[i],b[i],1e6);
	}
	while(bfs()){
		for(int i=1;i<=n;i++) now[i]=head[i];
		while(flow=dinic(s,1e6)) maxflow+=flow;
	}
	dfs(s);
	printf("%d\n",maxflow);
	for(int i=1;i<=n;i++) head[i]=maxflow=0,tot=1;
	add(t,s,1e6);
	s=0,t=n+1;
	for(int i=1;i<=m;i++){
		if(g[i]){
			add(a[i],b[i],(1e6-1));
			add(s,b[i],1);
			add(a[i],t,1);
			es[i]=tot-4;
		}
	}
	while(bfs()){
		for(int i=0;i<=n+1;i++) now[i]=head[i];
		while(flow=dinic(s,1e6)) maxflow+=flow;
	}
	for(int i=1;i<=m;i++){
		if(g[i]){
			if(vis[a[i]]!=vis[b[i]]) printf("%d %d\n",edge[es[i]]+1,edge[es[i]]+1);
			else printf("%d 1000000\n",edge[es[i]]+1);
		}
		else printf("0 1000000\n");
	}
	return 0;
}

标签:head,ver,int,Flow,Maximum,tot,dep,edge,CF843E
From: https://www.cnblogs.com/zyxawa/p/18328042

相关文章

  • tensorflow基础版
    目录一、tensorflow框架0.tensorflow的基本结构1.图2.会话3.张量4.变量5.高级API(keras)6.案例:线性回归7.文件I/O操作案例1:读取狗图片案例2:读取二进制图片案例3:全连接对手写数字进行识别二、神经网络案例:全连接对手写数字进行识别案例:读取文件案例:mnist手写数字数据在运行时......
  • 从996到副业过百万,程序员的副业新思路:在FlowUs上记录成长,分享知识,开启收益之旅
    在当今这个信息爆炸的时代,程序员们拥有的不仅仅是编码的能力,更是将技术转化为商业价值的潜力。下面,我将详细阐述一种适合程序员的生意思路,以展示如何利用技术背景和零散时间,实现个人成长与财富积累。一、技术积累与个人成长程序员的职业生涯是一个不断学习和成长的过程。利......
  • 升级到 TensorFlow 2.8.0 后无法解决导入“tensorflow.keras”问题
    TensorFlow2.8最近发布了,我一发布就安装了它。我真的需要它来支持更高的NumPy版本和一些新功能。但是,在我的conda环境中安装它之后,PyCharm和VSCode都无法再解析导入python3-mpipinstall--upgradetensorflowfromtensorflow.kerasimport...导......
  • Flowable框架-启动事件-定时器启动事件
    流程:定时器自动启动流程,李主管审批通过。admin设计流程模型,左边“定时器启动事件”,右下角输入ISO-8601的时间。 “用户任务”选择“分配用户”和“表单引用” 切换李主管登陆,时间到了会自动启动流程,流程任务在列表中显示。 下方循环时间上输入R2/PT1M,表示等待1分钟后再......
  • 为什么在训练期间我的 TensorFlow Siamese 网络中的所有变量的梯度均为 None?
    我正在TensorFlow中训练暹罗网络进行图像配准,但遇到一个问题,所有变量的梯度均为None。该网络采用一对图像(固定和移动)并输出仿射参数将移动图像与固定图像对齐的变换。模型、损失函数和训练步骤定义如下:模型:importtensorflowastfimporttensorflow_addonsa......
  • 对IC Flow的再反思
    最近测试有些进展,但也碰到了许多令人尴尬的问题。但问题不大,吸取经验教训才能进步。说回到这次碰到的问题。片上做的i2c接口实测时发现读取出现问题,体验了一波从实测追溯到仿真的过程。具体来说:如果有一套fpga代码有一套asic代码,版本管理做好,确保一致性fpga验证pass不能代......
  • 使用 Tensorflow 运行 hello world 程序会出现此错误
    我使用PycharmIDE来运行Python程序。我已经成功安装了TensorFlow包,没有任何问题,但是当我尝试运行该程序(一个简单的helloworld程序)时,它给了我这个很长的错误!路径和环境似乎都很好,我尝试遵循不同的教程,但没有一个出现此错误,我看到一个它有类似的错......
  • 警告:tensorflow:模型是用形状构建的(无、66、200、3)
    我有以下代码生成有关形状的错误:fromkeras.layersimportDense,ActivationfromkerasimportSequentialfromkeras.modelsimportload_modelfromtensorflow.keras.optimizersimportAdamimporttensorflowimportkerasfromtensorflow.python.keras.layersimpor......
  • 导入airflow会自动创建airflow目录
    我注意到,每当我在Python中导入气流时,它都会自动在我的主目录中创建一个气流目录。从字面上看就是这样$pythonPython3.11.9|packagedbyconda-forge|(main,Apr192024,18:36:13)[GCC12.3.0]onlinuxType"help","copyright","credits"or"license"formo......
  • react-flow 流程图2.0
    文件中需要下载的组件:npminstallreactflow(我的版本是[email protected])npminstallreact-markdown(下面流程图中用到了markdown)版本7.1.0npmiantd(版本5.18.3)npmiaxios(版本1.7.2)//marjdown中用到的样式字体等......