4823: [Cqoi2017]老C的方块

题目:传送门


题解:

   毒瘤题ORZ....

   太菜了看出来是最小割啥边都不会建...狂%大佬强强强

   

    黑白染色?不!是四个色一起染,四层图跑最小割。。。

   很惊奇的发现染完色之后只要是不喜欢的图形都一定可以由黄-->黑-->红-->绿 组成

   那就很nice啦...兴高采烈的去敲代码...结果10^5*10^5???搞毛线...太弱了ORZ,又看了一波大佬的操作,用map存!

   woc...不谈了不谈了...撸撸撸(分情况分到想屎...虽然不多)

   注意一下...黑到红连边的时候是不可以连inf的...然而我傻逼逼的打了...改成min(w[黑],w[红])...


代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<map>
  7. #define inf 999999999
  8. #define qread(x) x=read()
  9. using namespace std;
  10. typedef long long LL;
  11. inline LL read()
  12. {
  13. LL x=,f=;char ch;
  14. while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
  15. while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
  16. return f*x;
  17. }
  18. struct node
  19. {
  20. int x,y,c,next,other;
  21. }a[];int len,last[];
  22. int n,m,T,st,ed;
  23. void ins(int x,int y,int c)
  24. {
  25. int k1,k2;
  26. k1=++len;
  27. a[len].x=x;a[len].y=y;a[len].c=c;
  28. a[len].next=last[x];last[x]=len;
  29.  
  30. k2=++len;
  31. a[len].x=y;a[len].y=x;a[len].c=;
  32. a[len].next=last[y];last[y]=len;
  33.  
  34. a[k1].other=k2;
  35. a[k2].other=k1;
  36. }
  37. int head,tail;
  38. int list[],h[];
  39. bool bt_h()
  40. {
  41. memset(h,,sizeof(h));h[st]=;
  42. list[]=st;head=;tail=;
  43. while(head!=tail)
  44. {
  45. int x=list[head];
  46. for(int k=last[x];k;k=a[k].next)
  47. {
  48. int y=a[k].y;
  49. if(!h[y] && a[k].c)
  50. {
  51. h[y]=h[x]+;
  52. list[tail++]=y;
  53. }
  54. }
  55. head++;
  56. }
  57. if(h[ed])return true;
  58. return false;
  59. }
  60. int find_flow(int x,int flow)
  61. {
  62. int s=,t;
  63. if(x==ed)return flow;
  64. for(int k=last[x];k;k=a[k].next)
  65. {
  66. int y=a[k].y;
  67. if(h[y]==h[x]+ && a[k].c && s<flow)
  68. {
  69. s+=t=find_flow(y,min(a[k].c,flow-s));
  70. a[k].c-=t;a[a[k].other].c+=t;
  71. }
  72. }
  73. if(!s)h[x]=;
  74. return s;
  75. }
  76. int x[],y[],w[];//第x列,第y行,金币数
  77. map<pair<int,int>,int>id;
  78. int main()
  79. {
  80. len=;memset(last,,sizeof(last));
  81. memset(w,,sizeof(w));
  82. qread(n);qread(m);qread(T);st=T+;ed=st+;
  83. for(int i=;i<=T;i++){qread(x[i]);qread(y[i]);qread(w[i]);id[make_pair(x[i],y[i])]=i;}
  84. //黄-->黑-->红-->绿
  85. for(int i=;i<=T;i++)
  86. {
  87. if(x[i]%==)//黑或黄
  88. {
  89. if(y[i]%==)ins(st,i,w[i]);//黄
  90. else//黑
  91. {
  92. if(id[make_pair(x[i]+,y[i])])ins(id[make_pair(x[i]+,y[i])],i,inf);
  93. if(id[make_pair(x[i],y[i]+)])ins(id[make_pair(x[i],y[i]+)],i,inf);
  94. if(id[make_pair(x[i],y[i]-)])ins(id[make_pair(x[i],y[i]-)],i,inf);
  95. }
  96. }
  97. if(x[i]%==)//黑或黄
  98. {
  99. if(y[i]%==)ins(st,i,w[i]);//黄
  100. else//黑
  101. {
  102. //黑-->黄
  103. if(id[make_pair(x[i],y[i]-)])ins(id[make_pair(x[i],y[i]-)],i,inf);
  104. if(id[make_pair(x[i],y[i]+)])ins(id[make_pair(x[i],y[i]+)],i,inf);
  105. if(id[make_pair(x[i]-,y[i])])ins(id[make_pair(x[i]-,y[i])],i,inf);
  106.  
  107. //黑-->红(计算w)
  108. if(id[make_pair(x[i]+,y[i])])
  109. ins(i,id[make_pair(x[i]+,y[i])],min(w[i],w[id[make_pair(x[i]+,y[i])]]));
  110. }
  111. }
  112. if(x[i]%==)//红或绿
  113. {
  114. if(y[i]%==)//红
  115. {
  116. if(id[make_pair(x[i],y[i]-)])ins(i,id[make_pair(x[i],y[i]-)],inf);
  117. if(id[make_pair(x[i],y[i]+)])ins(i,id[make_pair(x[i],y[i]+)],inf);
  118. if(id[make_pair(x[i]+,y[i])])ins(i,id[make_pair(x[i]+,y[i])],inf);
  119. }
  120. else ins(i,ed,w[i]);//绿
  121. }
  122. if(x[i]%==)//红或绿
  123. {
  124. if(y[i]%==)//红
  125. {
  126. //红-->绿
  127. if(id[make_pair(x[i],y[i]-)])ins(i,id[make_pair(x[i],y[i]-)],inf);
  128. if(id[make_pair(x[i],y[i]+)])ins(i,id[make_pair(x[i],y[i]+)],inf);
  129. if(id[make_pair(x[i]-,y[i])])ins(i,id[make_pair(x[i]-,y[i])],inf);
  130.  
  131. //黑-->红
  132. if(id[make_pair(x[i]+,y[i])])
  133. ins(id[make_pair(x[i]+,y[i])],i,min(w[i],w[id[make_pair(x[i]+,y[i])]]));
  134. }
  135. else ins(i,ed,w[i]);//绿
  136. }
  137. }
  138. int ans=;
  139. while(bt_h())ans+=find_flow(st,inf);
  140. printf("%d\n",ans);
  141. return ;
  142. }

bzoj4823: [Cqoi2017]老C的方块(最小割)的更多相关文章

  1. bzoj 4823: [Cqoi2017]老C的方块 [最小割]

    4823: [Cqoi2017]老C的方块 题意: 鬼畜方块游戏不解释... 有些特殊边,有些四个方块组成的图形,方块有代价,删掉一些方块使得没有图形,最小化代价. 比较明显的最小割,一个图形中必须删 ...

  2. BZOJ4823 CQOI2017老C的方块(最小割)

    如果将其转化为一个更一般的问题即二分图带权最小单边点覆盖(最小控制集)感觉是非常npc的.考虑原题给的一大堆东西究竟有什么奇怪的性质. 容易发现如果与特殊边相邻的两格子都放了方块,并且这两个格子都各有 ...

  3. BZOJ4823 [Cqoi2017]老C的方块 【最小割】

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

  4. [bzoj4823][Cqoi2017]老C的方块

    来自FallDream的博客,未经允许,请勿转载,谢谢. 挺有意思的一道题.... 看完题面比较明确是最小割,考虑怎么建图 想了比较久 突破口应该是题目中那张奇怪的图 观察这个奇怪的图和方块,很容易发 ...

  5. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

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

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

  7. 【BZOJ4823】[CQOI2017]老C的方块(网络流)

    [BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子 ...

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

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

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

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

随机推荐

  1. android帧动画,移动位置,缩放,改变透明度等动画解说

    1.苦逼的需求又来了,须要实现一些动画效果,第一个想到的是播放gif图片,可是这样会占包的资源,而且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

  2. PBKDF2加密的实现

    PBKDF2(Password-Based Key Derivation Function). 通过哈希算法进行加密.由于哈希算法是单向的,能够将不论什么大小的数据转化为定长的"指纹&quo ...

  3. ubuntu13.10升级到ubuntu14.04

    Upgrading from Ubuntu 13.10 To upgrade from Ubuntu 13.10 on a desktop system: Open Software Sources. ...

  4. mysqli一些常用方法及详解

    mysqli一些常用方法及详解 1.die()函数:表示向用户输出引号中的内容后,程序终止运行,提示定制的出错信息 ex: $conn = mysqli_connect("localhost ...

  5. Java RTTI(类型信息)(.class 类对象)

    RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息.运行时的类型信息(RunTime Type Information) ...

  6. Beta冲刺提交—星期五

    课程链接: https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求链接: https://edu.cnblogs.com/ ...

  7. caffe遇到的错误记录

    Caffe——一个多么方便的深度学习工具,为啥安装和使用起来的bug这么多呢!把痛苦的记忆记录下来,把希望留给后人. Caffe的万丈高楼(Net)是按照我们的设计图纸(prototxt),用Blob ...

  8. jQuery中文学习站点

    jQuery是一个快速.简单的Javascript library,它简化了HTML文件的traversing,事件处理.动画.Ajax互动,从而方便了网页制作的快速发展.jQuery是为改变你编写J ...

  9. Log4net根据日志等级输出到不同文件

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...

  10. Hibernate框架学习(八)——查询-HQL语法

    一.单表查询 1.基础语法 2.排序 3.条件 4.分页 5.聚合 6.投影 二.多表查询 1.回顾原生SQL 1>交叉连接-笛卡尔积(避免)select * from A,B; 2>内连 ...