正解:网络流

解题报告:

传送门$QwQ$

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

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

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define il inline
  4. #define gc getchar()
  5. #define ll long long
  6. #define mp make_pair
  7. #define P pair<int,int>
  8. #define t(i) edge[i].to
  9. #define w(i) edge[i].wei
  10. #define n(i) edge[i].nxt
  11. #define ri register int
  12. #define rb register int
  13. #define rc register char
  14. #define rp(i,x,y) for(int i=x;i<=y;++i)
  15. #define my(i,x,y) for(int i=x;i>=y;--i)
  16. #define e(i,x) for(int i=head[x];~i;i=n(i))
  17.  
  18. const int N=5e5+,inf=1e9;
  19. int n,dep[N],head[N],cur[N],S,T,ed_cnt=-,col[N],mvx[]={,-,,},mvy[]={,,,-};
  20. struct ed{int to,nxt,wei;}edge[N<<];
  21. struct node{int x,y,val;}nod[N];
  22. map<P,int>mapp;
  23.  
  24. il int read()
  25. {
  26. rc ch=gc;ri x=;rb y=;
  27. while(ch!='-' && (ch>'' || ch<''))ch=gc;
  28. if(ch=='-')ch=gc,y=;
  29. while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
  30. return y?x:-x;
  31. }
  32. il void ad(ri x,ri y,ri z)
  33. {
  34. //printf("%d -> %d : %d\n",y,x,z);
  35. edge[++ed_cnt]=(ed){x,head[y],z};head[y]=ed_cnt;edge[++ed_cnt]=(ed){y,head[x],};head[x]=ed_cnt;}
  36. il bool bfs()
  37. {
  38. queue<int>Q;Q.push(S);memset(dep,,sizeof(dep));dep[S]=;
  39. while(!Q.empty())
  40. {
  41. ri nw=Q.front();Q.pop();//printf("nw=%d\n",nw);
  42. e(i,nw)if(w(i) && !dep[t(i)]){dep[t(i)]=dep[nw]+,Q.push(t(i));if(t(i)==T)return ;}
  43. }
  44. return ;
  45. }
  46. il int dfs(ri nw,ri flow)
  47. {
  48. if(nw==T || !flow)return flow;ri ret=;
  49. for(ri &i=cur[nw];~i;i=n(i))
  50. if(w(i) && dep[t(i)]==dep[nw]+)
  51. {ri tmp=dfs(t(i),min(flow,w(i)));ret+=tmp,w(i)-=tmp;w(i^)+=tmp,flow-=tmp;}
  52. return ret;
  53. }
  54. 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;}
  55. il int cal(ri x,ri y){return (*(x%>=)+(^((x+y)&)));}
  56. il void build1(ri nw)
  57. {
  58. rp(i,,)
  59. {
  60. ri tx=nod[nw].x+mvx[i],ty=nod[nw].y+mvy[i],to=mapp[mp(tx,ty)];
  61. if(to){if(col[to]==)ad(to,nw,min(nod[nw].val,nod[to].val));else ad(nw,to,inf);}
  62. }
  63. }
  64. il void build2(ri nw)
  65. {
  66. rp(i,,)
  67. {
  68. ri tx=nod[nw].x+mvx[i],ty=nod[nw].y+mvy[i],to=mapp[mp(tx,ty)];
  69. if(to){if(col[to]!=)ad(to,nw,inf);}
  70. }
  71. }
  72.  
  73. int main()
  74. {
  75. //freopen("3756.in","r",stdin);freopen("3756.out","w",stdout);
  76. read();read();n=read();S=;T=n+;memset(head,-,sizeof(head));
  77. 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);}
  78. rp(i,,n)
  79. {
  80. //printf("col[%d]=%d\n",i,col[i]);
  81. switch(col[i])
  82. {
  83. case :{ad(i,S,nod[i].val);break;}
  84. case :{build1(i);break;}
  85. case :{build2(i);break;}
  86. case :{ad(T,i,nod[i].val);break;}
  87. }
  88. }
  89. printf("%d\n",dinic());
  90. return ;
  91. }

洛谷$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. day5-python之递归与二分法

    一.递归的定义 递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用 二.递归分为两个阶段:递推,回溯 age(5) = age(4) + 2 age(4) = ag ...

  2. hdu 4128 Running relay (线性规划转半平面交)

    Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...

  3. SprinfJdbcTemplate+SpringMVC 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)

    代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件) 原文地址: http://jilongliang.iteye.com/blog/2262070 p ...

  4. hdu 2807 The Shortest Path(矩阵+floyd)

    The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. day8_python网络编程(实验版本)

    1.简单的套接字通信 1.1.服务端 import socket # 买手机 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 插 ...

  6. oracle函数 exp(y)

    [功能]返回e的y次幂(e为数学常量) [参数]y,数字型表达式 [返回]数字 [示例] select exp(3),exp(0),exp(-3) from dual; 返回:20.0855369,1 ...

  7. oracle 减少对表的查询

    在含有子查询的SQL语句中,要特别注意减少对表的查询. 例如: 低效 SELECT TAB_NAME FROM TABLES WHERE TAB_NAME = ( SELECT TAB_NAME FR ...

  8. Sublime插件:增强篇

    Sublime Text 如何安装插件详见:https://packagecontrol.io/installation WordCount:可以实时显示当前文件的字数. 安装后,后下角多出字数 En ...

  9. poj 1689 && zoj 1422 3002 Rubbery (Geometry + BFS)

    ZOJ :: Problems :: Show Problem 1689 -- 3002 Rubbery 这题是从校内oj的几何分类里面找到的. 题意不难,就是给出一个区域(L,W),这个区域里面有很 ...

  10. 在对文件进行随机读写,RandomAccessFile类,如何提高其效率

    花1K内存实现高效I/O的RandomAccessFile类 JAVA的文件随机存取类(RandomAccessFile)的I/O效率较低.通过分析其中原因,提出解决方案.逐步展示如何创建具备缓存读写 ...