正解:网络流

解题报告:

传送门$QwQ$

看到不能出现给定的讨厌的图形,简单来说就,特殊边两侧的方格不能同时再连方格.

所以如果出现,就相当于是四种方案?就分别炸四个格子.

然后冷静分析一波之后发现对于特殊边两侧的格子炸那个是没有影响的?于是这两个格子就只用选较小的一个炸就好,于是现在就变成了三种方案,可以考虑和之前做的那道,酒店之王,差不多的建图,$over$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ll long long
#define mp make_pair
#define P pair<int,int>
#define t(i) edge[i].to
#define w(i) edge[i].wei
#define n(i) edge[i].nxt
#define ri register int
#define rb register int
#define rc register char
#define rp(i,x,y) for(int i=x;i<=y;++i)
#define my(i,x,y) for(int i=x;i>=y;--i)
#define e(i,x) for(int i=head[x];~i;i=n(i)) const int N=5e5+,inf=1e9;
int n,dep[N],head[N],cur[N],S,T,ed_cnt=-,col[N],mvx[]={,-,,},mvy[]={,,,-};
struct ed{int to,nxt,wei;}edge[N<<];
struct node{int x,y,val;}nod[N];
map<P,int>mapp; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ri x,ri y,ri z)
{
//printf("%d -> %d : %d\n",y,x,z);
edge[++ed_cnt]=(ed){x,head[y],z};head[y]=ed_cnt;edge[++ed_cnt]=(ed){y,head[x],};head[x]=ed_cnt;}
il bool bfs()
{
queue<int>Q;Q.push(S);memset(dep,,sizeof(dep));dep[S]=;
while(!Q.empty())
{
ri nw=Q.front();Q.pop();//printf("nw=%d\n",nw);
e(i,nw)if(w(i) && !dep[t(i)]){dep[t(i)]=dep[nw]+,Q.push(t(i));if(t(i)==T)return ;}
}
return ;
}
il int dfs(ri nw,ri flow)
{
if(nw==T || !flow)return flow;ri ret=;
for(ri &i=cur[nw];~i;i=n(i))
if(w(i) && dep[t(i)]==dep[nw]+)
{ri tmp=dfs(t(i),min(flow,w(i)));ret+=tmp,w(i)-=tmp;w(i^)+=tmp,flow-=tmp;}
return ret;
}
il int dinic(){int ret=;while(bfs()){rp(i,S,T)cur[i]=head[i];while(int d=dfs(S,inf))ret+=d;}return ret;}
il int cal(ri x,ri y){return (*(x%>=)+(^((x+y)&)));}
il void build1(ri nw)
{
rp(i,,)
{
ri tx=nod[nw].x+mvx[i],ty=nod[nw].y+mvy[i],to=mapp[mp(tx,ty)];
if(to){if(col[to]==)ad(to,nw,min(nod[nw].val,nod[to].val));else ad(nw,to,inf);}
}
}
il void build2(ri nw)
{
rp(i,,)
{
ri tx=nod[nw].x+mvx[i],ty=nod[nw].y+mvy[i],to=mapp[mp(tx,ty)];
if(to){if(col[to]!=)ad(to,nw,inf);}
}
} int main()
{
//freopen("3756.in","r",stdin);freopen("3756.out","w",stdout);
read();read();n=read();S=;T=n+;memset(head,-,sizeof(head));
rp(i,,n){nod[i]=(node){read(),read(),read()};mapp[mp(nod[i].x,nod[i].y)]=i;col[i]=cal(nod[i].x,nod[i].y);}
rp(i,,n)
{
//printf("col[%d]=%d\n",i,col[i]);
switch(col[i])
{
case :{ad(i,S,nod[i].val);break;}
case :{build1(i);break;}
case :{build2(i);break;}
case :{ad(T,i,nod[i].val);break;}
}
}
printf("%d\n",dinic());
return ;
}

洛谷$P3756\ [CQOI2017]$老$C$的方块 网络流的更多相关文章

  1. [bzoj4823][洛谷P3756][Cqoi2017]老C的方块

    Description 老 C 是个程序员. 作为一个懒惰的程序员,老 C 经常在电脑上玩方块游戏消磨时间.游戏被限定在一个由小方格排成的R行C列网格上 ,如果两个小方格有公共的边,就称它们是相邻的, ...

  2. 洛咕 P3756 [CQOI2017]老C的方块

    四染色,贼好想 一个弃疗图形刚好对应一个红-绿-黄-粉色路线(不要吐槽颜色) 就是裸的最小割,建图傻逼懒得写了 #include<bits/stdc++.h> #define il inl ...

  3. BZOJ 4823 Luogu P3756 [CQOI2017]老C的方块 (网络流、最小割)

    题目链接 (Luogu) https://www.luogu.org/problem/P3756 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id= ...

  4. bzoj 4823 & 洛谷 P3756 老C的方块 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 https://www.luogu.org/problemnew/show/P3756 ...

  5. 【洛谷P3756】[CQOI2017]老C的方块(最小割)

    洛谷 题意: 给出一个网格图类似于这样: 现在给出一个\(n*m\)大小的网格,之后会给出一些点,若某些点相连形成了如下的几个图案,那么就是不好的. 现在可以删去一些点,但删除每个点都有一些代价,问最 ...

  6. Cube Stacking 来源:洛谷

    题目 题目oj(洛谷) Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...

  7. 3150luogu洛谷

    若说代码 那真的是很水 但是 思想却有点意思 这道题是洛谷博弈论专题的第一道入门题, 然而刚开始我是不会做的, 毕竟是道入门题, 我博弈论还没入门呢. 这道题的做法就是: 如果m为偶数, 那么先手赢( ...

  8. P1219 八皇后 洛谷

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. P1075,P1138(洛谷)

    今天难得做了做洛谷的题,而且还是两个! P1075:已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数.输入格式:一个正整数n.输出格式:一个正整数p,即较大的那个质数. 第一版代码: # ...

随机推荐

  1. laravel 随笔

    laravel5.5 1.laravel 查询数据库默认返回对象,如何改成 返回值为数组 答:在  App\Providers\EventServiceProvider 文件中 第一步: use Il ...

  2. uva 11754 Code Feat (中国剩余定理)

    UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...

  3. OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..

    tensorflow-gpu验证准确率是报错如上: 解决办法: 1. 加入os.environ['CUDA_VISIBLE_DEVICES']='2' 强制使用CPU验证-----慢 2.'batch ...

  4. sequence——强行推式子+组合意义

    sequence 考虑长度<=x的方案数F(x),然后(F(x)-F(x-1))*x贡献到答案里 n平方的做法可以直接DP, 感觉有式子可言, 就推出式子:类似coat,每个长度为i的计算i次. ...

  5. Python图表绘制Matplotlib

    引入 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 导入相关模块 使用 # 图表窗口1 → plt.sho ...

  6. cfp大纲

    AFP基础知识 本章共14个考点,考试考15分左右. 本章重点: .职业道德准则 .家庭财务分析:净值的计算.储蓄的计算 .简单的财务比率分析 .金融理财和法律:企业组织形式.夫妻公共财产制度.财产分 ...

  7. HDU 3746 Cyclic Nacklace(kmp next数组运用)

    Cyclic Nacklace Problem Description CC always becomes very depressed at the end of this month, he ha ...

  8. HDU 1024 Max Sum Plus Plus (动态规划 最大M字段和)

    Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To b ...

  9. springboot多对一关系映射

    原文:https://blog.csdn.net/h993438890/article/details/89146483 spring boot项目的创建省略创建两张表t_user 字段 主键id,u ...

  10. Team Foundation Server 2015使用教程【1】:团队项目创建