洛咕 P3965 [TJOI2013]循环格
同tjoi2010 打扫房间,每个点入度,出度都为1,可以向相邻4个点连边,但只有原来存在的边费用为0。
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
char s[20][20];
const int maxn=500,maxm=100000;
int S,T,n,m,fir[maxn],dis[maxm],nxt[maxm],w[maxm],cost[maxm],id=1;
il vd link(int a,int b,int c,int d){
nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c,cost[id]=d;
nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0,cost[id]=-d;
}
const int X[]={0,1,-1,0,0},Y[]={0,0,0,1,-1};
const char form[]="0DURL";
int num[16][16][2];
il bool Mincost(int&total){
static int que[maxn],hd,tl,dist[maxn],lst[maxn];
static bool inq[maxn];
hd=tl=0;que[tl++]=S;inq[S]=1;
memset(dist,63,sizeof dist);dist[S]=0;
memset(lst,0,sizeof lst);
while(hd^tl){
int x=que[hd];
for(int i=fir[x];i;i=nxt[i])
if(w[i]&&dist[dis[i]]>dist[x]+cost[i]){
dist[dis[i]]=dist[x]+cost[i],lst[dis[i]]=i;
if(!inq[dis[i]])inq[dis[i]]=1,que[tl++]=dis[i],tl%=maxn;
}
++hd;hd%=maxn;inq[x]=0;
}
for(int i=lst[T];i;i=lst[dis[i^1]])--w[i],++w[i^1],total+=cost[i];
return lst[T];
}
int main(){
#ifndef ONLINE_JUDGE
freopen("3965.in","r",stdin);
freopen("3965.out","w",stdout);
#endif
n=gi(),m=gi();
for(int i=1;i<=n;++i)scanf("%s",s[i]+1);
int cnt=0;S=++cnt,T=++cnt;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
num[i][j][0]=++cnt,link(S,num[i][j][0],1,0);
num[i][j][1]=++cnt,link(num[i][j][1],T,1,0);
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
for(int k=1;k<=4;++k){
int xx=i+X[k],yy=j+Y[k];
if(xx>n)xx=1;if(yy>m)yy=1;
if(xx==0)xx=n;if(yy==0)yy=m;
link(num[i][j][0],num[xx][yy][1],1,s[i][j]!=form[k]);
}
int ans=0;while(Mincost(ans));printf("%d\n",ans);
return 0;
}
洛咕 P3965 [TJOI2013]循环格的更多相关文章
- 洛谷 P3965 [TJOI2013]循环格 解题报告
P3965 [TJOI2013]循环格 题目背景 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子. 每个元素有一个坐标(行,列),其中左上角元素坐标为\((0,0)\).给定一个起始位\ ...
- Bzoj 3171: [Tjoi2013]循环格 费用流
3171: [Tjoi2013]循环格 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 741 Solved: 463[Submit][Status][ ...
- [Tjoi2013]循环格
[Tjoi2013]循环格 2014年3月18日1,7500 Description Input 第一行两个整数R,C.表示行和列,接下来R行,每行C个字符LRUD,表示左右上下. Output 一个 ...
- BZOJ_3171_[Tjoi2013]循环格_最小费用最大流
BZOJ_3171_[Tjoi2013]循环格_最小费用最大流 Description 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为 ...
- bzoj 3171: [Tjoi2013]循环格
#include<cstdio> #include<iostream> #include<cstring> #define M 10000 #define inf ...
- BZOJ3171 Tjoi2013 循环格
传送门 Description 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c) ,你可以沿着箭头 ...
- 【BZOJ 3171】 [Tjoi2013]循环格
Description 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c) ,你可以沿着箭头防线在格 ...
- 3171. [TJOI2013]循环格【费用流】
Description 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c) ,你可以沿着箭头防线在格 ...
- BZOJ 3171 [Tjoi2013]循环格(费用流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3171 [题目大意] 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子. 每 ...
随机推荐
- 17级-车辆工程-周金霖 计算机作业 MP4音乐网站
- Django 错误之 No module named ‘MySQLdb’
由于卸载Mysql时将很多相关依赖包都卸载了,重装mysql后启动django出现如下错误: django.core.exceptions.ImproperlyConfigured:Error loa ...
- 第2次作业——APP案例分析
第一部分 调研, 评测 1.下载软件并使用起来,描述最简单直观的个人第一次上手体验. 知乎,中文互联网最大的知识平台.使用知乎这个APP3年了,目睹了它的兴盛(当然没有衰亡@_@).打开这款APP,主 ...
- tomcat6 集群配置
1. 概要 web容器在做集群配置时,有3点需要注意: 1.1. 负载均衡配置: 1.2. session共享: 1.3. 若做的是单机集群(多个tomcat安装在同一台机器上),需要注意端口冲突问题 ...
- Spring源码分析之IOC容器(一)
Spring作为当今风靡世界的Web领域的第一框架,作为一名Java开发程序员是一定要掌握的,除了需要掌握基本的使用之外,更需要掌握其实现原理,因为我们往往在开发的过程中,会出现各种各样的异常问题.而 ...
- T440安装Win7系统
于T440自带的是Win8系统,硬盘格式为GPT分区格式,而Win7必须要MRP格式,所以必须要将硬盘格式从GPT修改为MRP,方法如下: 准备工作,下载”电脑店U盘启动盘制作工具“(百度一下,去官网 ...
- django CBV模式下如何去掉csrf验证
方式一:from django.views.decorators.csrf import csrf_exemptfrom django.utils.decorators import method_d ...
- 项目--解决MySQL数据库插入中文乱码
转载自:http://blog.csdn.net/zzh920625/article/details/51226312 情景再现] 如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有 ...
- 【转】np.linspace()、np.logspace()、np.arange()
转自:https://blog.csdn.net/ui_shero/article/details/78881067 1.np.linspace() 生成(start,stop)区间指定元素个数num ...
- win10下安装Jenkins
Jenkins是一个基于java的持续集成工具,开源项目.用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.随着近几年docker技术的成熟和应用,很多公司开始大量尝试 ...