[QOJ1359] Setting Maps
\(k=1\) 的时候显然是最小割。把一个点 \(u\) 拆成 两个点,中间连流量为 \(c_u\) 的边。
那么考虑扩展到 \(k\) 更大的情况。把上图的每个入点和出点都拆成 \(k\) 个。把节点 \(u\) 第 \(i\) 层入点和第 \(i+1\) 层入点连接,再把第 \(i\) 层入点和所有满足 \(j>i\) 层的出点连接。这样跑最小割时,割掉一条边就会上升一层,然后要从第一层源点跑到第 \(k\) 层汇点,割边的时候就会让每条路径都上升了 \(k\) 层。
#include<bits/stdc++.h>
using namespace std;
const int N=3005,M=200005,INF=2.1e9;
struct edge{
int v,nxt,f;
}e[M];
int n,m,k,fl[M],c[N],v[N],hd[N],vh[N],q[N],l,r,s,t,e_num=1,sum,cnt,to[N][10],h[N];
long long ans;
void add_edge(int u,int v,int f)
{
e[++e_num]=(edge){v,hd[u],f};
hd[u]=e_num;
e[++e_num]=(edge){u,hd[v],0};
hd[v]=e_num;
}
int bfs()
{
memset(v,0,sizeof(v));
memcpy(vh,hd,sizeof(hd));
v[q[l=r=1]=s]=1;;
while(l<=r)
{
for(int i=hd[q[l]];i;i=e[i].nxt)
if(e[i].f&&!v[e[i].v])
v[q[++r]=e[i].v]=v[q[l]]+1;
++l;
}
return v[t];
}
int dfs(int x,int fl)
{
if(x==t)
return fl;
int k;
for(int&i=vh[x];i;i=e[i].nxt)
{
if(e[i].f&&v[e[i].v]==v[x]+1&&(k=dfs(e[i].v,min(fl,e[i].f))))
{
e[i].f-=k,e[i^1].f+=k;
return k;
}
}
return 0;
}
void dinic()
{
int k;
while(bfs())
while(k=dfs(s,INF))
ans+=k;
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
int p=2*n+1;
for(int i=1;i<=n;i++)
{
scanf("%d",c+i),sum+=c[i];
for(int j=0;j<k;j++)
{
add_edge(j*p+(i<<1),j*p+(i<<1|1),c[i]);
for(int a=j+1;a<k;a++)
add_edge(j*p+(i<<1),a*p+(i<<1|1),INF);
}
}
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
for(int j=0;j<k;++j)
add_edge((u<<1|1)+j*p,(v<<1)+j*p,INF);
}
s<<=1;
t=((k-1)*p)+(t<<1|1);
dinic();
if(ans>sum)
return puts("-1"),0;
bfs();
for(int i=1;i<=n;i++)
for(int j=0;j<k;j++)
if(v[j*p+(i<<1)]&&!v[j*p+(i<<1|1)])
h[i]=1;
for(int i=1;i<=n;i++)
cnt+=h[i];
printf("%d\n",cnt);
for(int i=1;i<=n;i++)
if(h[i])
printf("%d ",i);
}
[QOJ1359] Setting Maps的更多相关文章
- 「Python」35个知识点
No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Pyt ...
- UE4 Keynote 1
[UE4 Keynote 1] 1.U3D中的Project,在UE4中叫 ContentBrowser,中文名叫“内容浏览器” 最多可以打开4个ContentBrowser,通过 “窗口” -> ...
- 35个高级Python知识点总结
原文地址:https://blog.51cto.com/xvjunjie/2156525 No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底, ...
- 35个高级python知识点
No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function) ...
- java.sql.SQLException: Error setting driver on UnpooledDataSource.Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for IStudentDaoMapper.Mapperdao.selectcou
是因为 Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for ...
- Windows 10 新特性 -- Bing Maps 3D地图开发入门(一)
本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件.Compiled da ...
- nested exception is java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoSupport': ...
- mybatis Result Maps collection already contains value for com.ebways.dictionary.dao.impl.PtInfoDaoImpl.beanMap
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...
- Xcode Build Setting Reference
https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/ ...
- Hive ERROR: Out of memory due to hash maps used in map-side aggregation
什么时候hive在运行大数据量的统计查询语句时.常常会出现以下OOM错误.详细错误提演示样例如以下: Possible error: Out of memory due to hash maps us ...
随机推荐
- Web开发框架 WebBuilder 9 发布
WebBuilder 是一款强大,全面和高效的Web开发框架 .基于浏览器的集成开发环境,智能化的设计,能轻松完成常规桌面应用和面向手机等的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用的 ...
- 第一个程序PingPong
功能需求 如图所示,开启两个ping类型的服务ping1和ping2,ping1给ping2发消息,ping2收到回应ping1,ping1收到再回应ping2,不断循环. 服务模块 Skynet提供 ...
- 循环神经网络RNN完全解析:从基础理论到PyTorch实战
在本文中,我们深入探讨了循环神经网络(RNN)及其高级变体,包括长短时记忆网络(LSTM).门控循环单元(GRU)和双向循环神经网络(Bi-RNN).文章详细介绍了RNN的基本概念.工作原理和应用场景 ...
- jdk17下netty导致堆内存疯涨原因排查
背景: 介绍 天网风控灵玑系统是基于内存计算实现的高吞吐低延迟在线计算服务,提供滑动或滚动窗口内的count.distinctCout.max.min.avg.sum.std及区间分布类的在线统计计算 ...
- 华为云ECS上搭建Hadoop集群环境启动时报错“java.net.BindException: Cannot assign requested address”问题的解决
启动时使用: ./sbin/start-all.sh 1 报错: java.net.BindException: Problem binding to [test7972:9000] java.net ...
- Python/Java/Php/C#/Go/C/C++这几个主力语言,谁到底真的不行
1.前言 阿里最近又进行了史诗级的大裁员,IT行业肉眼可见的持续性衰退与没落.当潮水退却,才能看出谁在裸泳.作为当今计算机编程界的几大主力语言,谁才真正的裸泳者呢? 2.描述 1.Python: Py ...
- Kruskal重构树 学习笔记
Kruskal 重构树 最大生成树将部分内容倒置即可 回顾:Kruskal 基本信息 求解最小生成树 时间复杂度:\(O(m \log m)\) 更适合稀疏图 算法思想 按照边权从小到大排序 依次枚举 ...
- 用 Dijkstra 算法解决最短路问题
话不多说,先看图 1.1 朴素版的Dijkstra算法 一般用到这个情况稠密图,也就是节点的个数比边的个数少. (稠密图用邻接矩阵存储) #include<cstring> #includ ...
- 聊聊基于Alink库的推荐系统
概述 Alink提供了一系列与推荐相关的组件,从组件使用得角度来看,需要重点关注如下三个方面: 算法选择 推荐领域有很多算法,常用的有基于物品/用户的协同过滤.ALS.FM算法等.对于不同的数据场景, ...
- Treap树学习笔记
等我写完. 普通fhq treap: enum { Maxn = 1000005 }; struct FHQTreap { int lson[Maxn], rson[Maxn], data[Maxn] ...