题面:中文题面,这里不占用篇幅

分析:

  看到题面,我就想弃疗……

  但是作为任务题单,还是抄了题解……

  大概就是将每个格子拆点,拆成五个点,上下左右的触点和一个负责连源汇点的点(以下简称本点)。

  这个这个本点要根据初始形态向相应的触点连接费用为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 ;
}

费用流

  

最新文章

  1. jquery Datatables 行数据删除、行上升、行下降功能演示
  2. 多个jar包合并成一个jar包的办法
  3. C# WinForm修改配置文件
  4. Windows 8.1 新增控件之 CommandBar
  5. 一个页面从输入URL 到页面加载显示完成的过程中都发生了什么
  6. rgb转灰度 RGB To Gray php Adobe RGB (1998) [gamma=2.20]
  7. BeanUtils 学习教程
  8. java.lang.NoClassDefFoundError: Could not initialize class ......
  9. ofbiz进击 。 ofbiz 退货流程(包含获取可退货项流程分析 以及 取消退货项的过程分析)
  10. bzoj3393 [Usaco2009 Jan]Laserphones 激光通讯
  11. Android Popupwindow 拖动
  12. OpenGL-------状态机
  13. Maven项目中提示:Eclipse “cannot be resolved to a type” error
  14. sqlserver 笔记:常用字符串函数
  15. 使用WinDBG调试查看C#内存转储文件
  16. 关于Android Studio 代理
  17. Python-序列号和模块复习-64
  18. 一类n阶微分方程转1阶微分方程组
  19. java 获取指定日前的前一天
  20. [翻译] Using Custom Functions in a Report 在报表中使用自己义函数

热门文章

  1. maven仓库错误
  2. 洛谷 P2763 试题库问题【最大流】
  3. 洛谷 P1540 机器翻译(队列)
  4. [Usaco2012 Open]Balanced Cow Subsets
  5. Android推送服务(2)微信智能心跳方案
  6. 【小程序】基于.NET CORE2.1 的 微信开放平台 第三方平台开发 教程一 准备工作
  7. java数组实现买彩票(二个一维数组的比较思想)
  8. 017:COM1无法打开
  9. E. The Values You Can Make 背包,同时DP
  10. 调用wsdl接口,参数是xml格式