传送门

是个最大费用可行流

这题的建边很毒瘤

首先有危险度的点肯定要拆点

关键在于其它点怎么办

如果拆了不好保证每个点只经过一次

不拆连网络流都跑不了

但仔细观察题面,不能不难(???)发现一个L中那两个坐标和为偶数的点一定分两种

(奇, 奇)和(偶, 偶)

那可以用这个性质建边,一类连源点,一类连汇点就行了

  • 所以总结是啥?坐标题善于发现坐标的奇偶性规律?

Code:

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 5000
#define ll long long
#define fir first
#define sec second
#define make make_pair
//#define int long long char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
} int n, m, k;
int head[N], size=1, val[55][55], tot, s1, s2, t, dis[N], inc[N], back[N], ans, sum;
bool lim[55][55], vis[N];
pair<int, int> mp[55][55];
struct edge{int to, next, flw, cst;}e[N<<3];
inline void add(int s, int t, int f, int c) {e[++size].to=t; e[size].flw=f; e[size].cst=c; e[size].next=head[s]; head[s]=size;} bool spfa(int s, int t) {
//cout<<"spfa "<<s<<' '<<t<<endl;
memset(dis, 127, sizeof(dis));
memset(back, -1, sizeof(back));
dis[s]=0; inc[s]=INF;
queue<int> q;
q.push(s);
int u;
while (q.size()) {
u=q.front(); q.pop();
vis[u]=0;
for (int i=head[u],v; ~i; i=e[i].next) {
v = e[i].to;
if (e[i].flw && dis[v]>dis[u]+e[i].cst) {
dis[v]=dis[u]+e[i].cst;
//cout<<"dis: "<<dis[v]<<endl;
back[v]=i; inc[v]=min(inc[u], e[i].flw);
if (!vis[v]) q.push(v), vis[v]=1;
}
}
}
return ~back[t];
} signed main()
{
memset(head, -1, sizeof(head));
n=read(); m=read(); k=read();
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
val[i][j]=read(), sum+=val[i][j]; //, cout<<val[i][j]<<endl;
for (int i=1,x,y; i<=k; ++i) {
x=read(); y=read();
lim[x][y]=1;
}
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
if (!lim[i][j]) {
if ((i+j)&1) mp[i][j]=make(tot+1, tot+2), tot+=2;
else mp[i][j]=make(++tot, 0);
}
s1=++tot, s2=++tot, t=++tot;
//cout<<"s: "<<s1<<' '<<s2<<' '<<t<<endl;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j) if (!lim[i][j]) {
if ((i+j)&1) {
add(mp[i][j].fir, mp[i][j].sec, 1, -val[i][j]), add(mp[i][j].sec, mp[i][j].fir, 0, val[i][j]);
}
else {
if (i&1) {
add(s2, mp[i][j].fir, 1, 0), add(mp[i][j].fir, s2, 0, 0);
if (i<n && !lim[i+1][j]) add(mp[i][j].fir, mp[i+1][j].fir, 1, 0), add(mp[i+1][j].fir, mp[i][j].fir, 0, 0);
if (j<n && !lim[i][j+1]) add(mp[i][j].fir, mp[i][j+1].fir, 1, 0), add(mp[i][j+1].fir, mp[i][j].fir, 0, 0);
if (i>1 && !lim[i-1][j]) add(mp[i][j].fir, mp[i-1][j].fir, 1, 0), add(mp[i-1][j].fir, mp[i][j].fir, 0, 0);
if (j>1 && !lim[i][j-1]) add(mp[i][j].fir, mp[i][j-1].fir, 1, 0), add(mp[i][j-1].fir, mp[i][j].fir, 0, 0);
}
else {
add(mp[i][j].fir, t, 1, 0), add(t, mp[i][j].fir, 0, 0);
if (i>1 && !lim[i-1][j]) add(mp[i-1][j].sec, mp[i][j].fir, 1, 0), add(mp[i][j].fir, mp[i-1][j].sec, 0, 0);
if (j>1 && !lim[i][j-1]) add(mp[i][j-1].sec, mp[i][j].fir, 1, 0), add(mp[i][j].fir, mp[i][j-1].sec, 0, 0);
if (i<n && !lim[i+1][j]) add(mp[i+1][j].sec, mp[i][j].fir, 1, 0), add(mp[i][j].fir, mp[i+1][j].sec, 0, 0);
if (j<n && !lim[i][j+1]) add(mp[i][j+1].sec, mp[i][j].fir, 1, 0), add(mp[i][j].fir, mp[i][j+1].sec, 0, 0);
}
}
}
add(s1, s2, 0, 0), add(s2, s1, 0, 0);
//cout<<"pos1"<<endl;
int tem=0;
for (int i=1,it=size-1; i<=m; ++i) {
++e[it].flw;
while (spfa(s1, t)) {
tem+=dis[t];
ans=min(ans, tem);
//cout<<"ans: "<<ans<<endl;
for (int u=t; u!=s1; u=e[back[u]^1].to) {
e[back[u]].flw-=inc[t];
e[back[u]^1].flw+=inc[t];
}
}
}
printf("%d\n", sum+ans); return 0;
}

题解 marshland的更多相关文章

  1. 2018HN省队集训

    HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...

  2. [2018HN省队集训D5T1] 沼泽地marshland

    [2018HN省队集训D5T1] 沼泽地marshland 题意 给定一张 \(n\times n\) 的棋盘, 对于位置 \((x,y)\), 若 \(x+y\) 为奇数则可能有一个正权值. 你可以 ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. Vue3 + TypeScript 开发实践总结

    前言 迟来的Vue3文章,其实早在今年3月份时就把Vue3过了一遍.在去年年末又把 TypeScript 重新学了一遍,为了上 Vue3 的车,更好的开车.在上家公司4月份时,上级领导分配了一个内部的 ...

  2. ARTS第五周

    -第五周.这两周在复习大学里的课程,发现当时觉得课上很多看不懂的,现在看起来轻松多了,也带来了新的感悟. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评 ...

  3. XDFZOI 月赛 201905 Sliver

    组题人自己组完过后,才发现自己还是太弱了... T1 简单模拟. 按照游戏规则直接模拟显然是不明智的,所以我们可以像石头剪刀布一样,将判断改变为检验. 同时,我们发现,一共只有48种牌,所以我们可以直 ...

  4. Linux云计算-07_Linux文件服务器之vsftpd服务器

    本章向读者介绍企业vsftpd服务器实战.匿名用户访问.系统用户访问及虚拟用户实战等. 1 vsftpd服务器企业实战 文件传输协议(File Transfer Protocol,FTP),基于该协议 ...

  5. 学生信息管理系统--基于jsp技术和MySQL的简单增删改查

    web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...

  6. HTML5-CSS(二)

    一. CSS  文本样式 1.font-size p { font-size: 50px;}解释:设置文本的大小. xx-small.x-small.small.medium.large.x-larg ...

  7. ajax和springmvc的请求响应原理——深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法

    1,四大重要部分: 请求链接 post请求和get请求 请求参数形式 响应内容形式 2,从springmvc的controller角度,controller能接收到请求的前提 请求链接必须对应 pos ...

  8. Requests方法 --- post 请求body的四种类型

    常见的 post 提交数据类型有四种: 1.第一种:application/json:这是最常见的 json 格式,也是非常友好的深受小伙伴喜欢的一种,如下{"input1":&q ...

  9. spring.jpa.open-view问题

    由ReentrantLock和JPA(spring.jpa.open-in-view)导致的死锁问题原因分析. 问题 在压测过程中,发现服务经过一段时间压测之后出现无响应,且无法自动恢复. 分析 从上 ...

  10. tomcat与springmvc 结合 之---第16篇 servlet如何解析成员变量和DispatcherServlet如何解析

    writedby 张艳涛,用了两个星期将深入刨析tomcat看完了,那么接下来该看什么呢?真是不知道,知识这东西上一个月看的jvm,锁.多线程并发 又都忘了.... tomcat学完,我打算看spri ...