[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 ...
随机推荐
- Pandas 使用教程 CSV
CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本). CSV 是一种通用的.相对简单的文 ...
- 使用 Rancher 安装 K8s 集群
舞台环境 Ubuntu 22.04.2 LTS Docker 24.0.2 2GB RAM或者更多 CPU 2核心或者更多 Rancher 2.6.9 测试环境中,我准备了两台 Ubuntu 服务器, ...
- 解密Prompt系列14. LLM Agent之搜索应用设计:WebGPT & WebGLM & WebCPM
前两章,我们分别介绍了基于微调和prompt的工具调用方案,核心都是如何让大模型和工具进行交互,包括生成工具调用语句和处理工具调用请求.不过在实际应用中,想要设计一个可以落地的LLM Agent,需要 ...
- 在线问诊 Python、FastAPI、Neo4j — 创建症状节点
目录 症状数据 创建节点 附学习 电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况.症状一般可以从主诉中提取. 症状数据 symptom_data.csv CSV 中,没有直接一行一个 ...
- mysql触发器使用教程-六种触发器
参考:https://zhuanlan.zhihu.com/p/439273702 触发器(Trigger)是 MySQL 中非常实用的一个功能,它可以在操作者对表进行「增删改」 之前(或之后)被触发 ...
- Nexus搭建maven仓库并使用
一.基本介绍 参考:https://www.hangge.com/blog/cache/detail_2844.html https://blog.csdn.net/zhuguanbo/article ...
- pandas常用的数据类型,(serises和dataform)
- JDK8升级JDK11最全实践干货来了
1.前言 截至目前(2023年),Java8发布至今已有9年,2018年9月25日,Oracle发布了Java11,这是Java8之后的首个LTS版本.那么从JDK8到JDK11,到底带来了哪些特性呢 ...
- Solution -「LOCAL 28731」「重庆市 2021 中学友谊赛」Rainyrabbit 爱求和
Description Link. \(\operatorname{Rainyrabbit}\) 是一个数学极好的萌妹子,近期他发现了一个可爱的函数: \[f(n,m,k)=\sum_{d=1}^n ...
- 想转行DevOps工程师?快来看看DevOps工程师的学习路径,少走弯路
DevOps方法论 :::tips DevOps方法论的主要来源是Agile, Lean 和TOC, 独创的方法论是持续交付. ::: DevOps 是一种软件开发方法,涉及持续开发,持续测试,持续集 ...