LOJ 2321 清华集训2017 无限之环 拆点+最小费用最大流
题面:中文题面,这里不占用篇幅
分析:
看到题面,我就想弃疗……
但是作为任务题单,还是抄了题解……
大概就是将每个格子拆点,拆成五个点,上下左右的触点和一个负责连源汇点的点(以下简称本点)。
这个这个本点要根据初始形态向相应的触点连接费用为0容量为1的边,再由旋转规则,使初始触点向相应的触点连接费用为旋转次数的边,然后相邻的格子触点相连?
反正很乱就是了。如果再写一遍,我应该不会写罢……
代码:(这份代码在Luogu上不开O2会TLE十八组数据……开了才能过,在loj是可过的)
#include<bits/stdc++.h>
#define up(u) u+tn*sm
#define ri(u) u+((tn+1)&3)*sm
#define dn(u) u+((tn+2)&3)*sm
#define le(u) u+((tn+3)&3)*sm
#define md(u) u+(sm<<2)
using namespace std;queue<int>q;
const int N=,M=,inf=0x3f3f3f3f;
struct node{int y,z,f,nxt;}e[M];
int mf=,f[N],lst[N],ans=;bool vis[N];
int sm,c=,S=,T,h[N],d[N],pre[N],n,m,k;
void add(int x,int y,int f,int z,int tp){
if(tp) swap(x,y);
e[++c]=(node){y,z,f,h[x]};h[x]=c;
e[++c]=(node){x,-z,,h[y]};h[y]=c;
} bool spfa(){
for(int i=S;i<=T;i++) pre[i]=-,
f[i]=inf,lst[i]=vis[i]=,d[i]=inf;
q.push(S);d[S]=;pre[S]=;
while(q.size()){
int x=q.front();q.pop();vis[x]=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]>d[x]+e[i].z&&e[i].f){
d[y]=d[x]+e[i].z;pre[y]=x;lst[y]=i;
f[y]=min(f[x],e[i].f);
if(!vis[y]) vis[y]=,q.push(y);
}
} return (pre[T]!=-);
} void solve(){
while(spfa()){
ans+=d[T]*f[T];int x=T;mf+=f[T];
while(x) e[lst[x]].f-=f[T],
e[lst[x]^].f+=f[T],x=pre[x];
} return ;
} int main(){
k=;int t,sp,tn,tf=,mc=;
scanf("%d%d",&n,&m);sm=n*m;T=sm*+;
for(int i=;i<n;i++)
for(int j=;j<m;j++,k++){
tn=;t=(i+j)&;
if(t) add(S,md(k),inf,,);
else add(md(k),T,inf,,);
if(i) add(dn(k-m),up(k),,,t);
if(j) add(ri(k-),le(k),,,t);
scanf("%d",&sp);
if(sp&) add(up(k),md(k),,,t),tf++;
if(sp&) add(ri(k),md(k),,,t),tf++;
if(sp&) add(dn(k),md(k),,,t),tf++;
if(sp&) add(le(k),md(k),,,t),tf++;
switch(sp){
case :tn++;
case :tn++;
case :tn++;
case :
add(ri(k),up(k),,,t);
add(dn(k),up(k),,,t);
add(le(k),up(k),,,t);break;
case :tn++;
case :tn++;
case :tn++;
case :
add(dn(k),up(k),,,t);
add(le(k),ri(k),,,t);break;
case :tn++;
case :tn++;
case :tn++;
case :
add(dn(k),le(k),,,t);
add(dn(k),up(k),,,t);
add(dn(k),ri(k),,,t);break;
}
} solve();
printf("%d",tf==mf<<?ans:-);return ;
}
费用流
LOJ 2321 清华集训2017 无限之环 拆点+最小费用最大流的更多相关文章
- BZOJ.5120.[清华集训2017]无限之环(费用流zkw 黑白染色)
题目链接 LOJ 洛谷 容易想到最小费用最大流分配度数. 因为水管形态固定,每个点还是要拆成4个点,分别当前格子表示向上右下左方向. 然后能比较容易地得到每种状态向其它状态转移的费用(比如原向上的可以 ...
- [清华集训2017]无限之环(infinityloop)
description 题面 solution 一开始的思路是插头\(DP\),然而复杂度太高 考虑将网格图黑白染色后跑费用流 流量为接口数,费用为操作次数 把一个方格拆成五个点,如何连边请自行脑补 ...
- UVA 1658 海军上将(拆点法+最小费用限制流)
海军上将 紫书P375 这题我觉得有2个难点: 一是拆点,要有足够的想法才能把这题用网络流建模,并且知道如何拆点. 二是最小费用限制流,最小费用最大流我们都会,但如果限制流必须为一个值呢?比如这题限制 ...
- poj3422 拆点法x->x'建立两条边+最小费用最大流
/** 题目:poj3422 拆点法+最小费用最大流 链接:http://poj.org/problem?id=3422 题意:给定n*n的矩阵,含有元素值,初始sum=0.每次从最左上角开始出发,每 ...
- Loj #2321. 「清华集训 2017」无限之环
Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...
- [LOJ#2330]「清华集训 2017」榕树之心
[LOJ#2330]「清华集训 2017」榕树之心 试题描述 深秋.冷风吹散了最后一丝夏日的暑气,也吹落了榕树脚下灌木丛的叶子.相识数年的Evan和Lyra再次回到了小时候见面的茂盛榕树之下.小溪依旧 ...
- [LOJ#2329]「清华集训 2017」我的生命已如风中残烛
[LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
随机推荐
- 关于eclipse部署项目后,在tomcat中的webapps文件夹下没有项目
转自:https://blog.csdn.net/yang505581644/article/details/78802316 一.发现问题 在eclipse中新建Dynamic Web Projec ...
- PCB CAM自动化后台配置说明
CAM自动化项目经历9个月时间里,在我们IT团队与工程部深入合作下,依据PCB各种场景定制特定功能,且这几个月里在不断的改进与迭代脚本功能,在此期间攻破了一个又一个难题,最终项目第一阶段已顺立上线运行 ...
- Swift4 函数, 元组, 运算符
创建: 2018/02/19 完成: 2018/02/19 更新: 2018/02/25 修改标题 [Swift4 函数] -> [Swift4 函数, 元组, 运算符] 更新 :2018/03 ...
- bzoj 1112: [POI2008]砖块Klo【对顶堆】
priority_queue实现的对顶堆,细节超级多WA了十几次--但是理论上是最简便的orz其实是我已经不会写平衡树了 枚举左端点,显然要把这一段的高度搞成(l,l+k-1)的高度中位数,所以需要一 ...
- nginx下配置虚拟主机
linux 虚拟机下配置虚拟主机 nginx.conf 文件不动, 在 conf.d 或者 conf 目录下 新建项目.conf server { listen 80; server_name loc ...
- [Usaco2017 Feb]Why Did the Cow Cross the Road II (Platinum)
Description Farmer John is continuing to ponder the issue of cows crossing the road through his farm ...
- _bzoj1087 [SCOI2005]互不侵犯King【dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1087 令f(i, j, k)表示前i列,二进制状态为j,已经用了k个国王的方案数,则 f(i ...
- 备份字段(CATALOGUE_CODE)
update am_e4_entry set CATALOGUE_CODE_back=CATALOGUE_CODE; 还原字段 update am_e4_entry a set CATALOGUE_C ...
- (四)SpringIoc之Bean装配
在pom.xml的依赖 <dependencies> <!--测试包--> <dependency> <groupId>junit</groupI ...
- 块级元素的text-align对行内元素和果冻元素(inline-block)的作用
块级元素社设置了text-align:center以后,对其直接行内元素/果冻元素.继承行内元素/果冻元素都会产生“居中效应”. <style> .test4{ text-align: c ...