给定一个平面图和一个源点S、汇点T都在图中无边界的区域上,这样的图叫S-T平面图

我们把图中每一个独立的面看做一个点,对于每条边e,将它两侧的面连一条边,其中靠近S的一段与S相连,与T相连的一段与T相连

于是这个平面图的最小割就是新图的S-T最短路

1001: [BeiJing2006]狼抓兔子

Time Limit: 15 Sec  Memory Limit: 162 MB

Submit: 24311  Solved: 6138

[Submit][Status][Discuss]

Description

现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,
而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:

左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 
1:(x,y)<==>(x+1,y) 
2:(x,y)<==>(x,y+1) 
3:(x,y)<==>(x+1,y+1) 
道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,
开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(N,M)的窝中去,狼王开始伏击
这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,
才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的
狼的数量要最小。因为狼还要去找喜羊羊麻烦.

Input

第一行为N,M.表示网格的大小,N,M均小于等于1000.
接下来分三部分
第一部分共N行,每行M-1个数,表示横向道路的权值. 
第二部分共N-1行,每行M个数,表示纵向道路的权值. 
第三部分共N-1行,每行M-1个数,表示斜向道路的权值. 
输入文件保证不超过10M

Output

输出一个整数,表示参与伏击的狼的最小数量.

Sample Input

3 4

5 6 4

4 3 1

7 5 3

5 6 7 8

8 7 6 5

5 5 5

6 6 6

Sample Output

14

可以拿这道题练练手

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. #define LL long long int
  7. using namespace std;
  8. const int maxn=5000005,maxm=6000005,INF=2000000000,P=1000000007;
  9.  
  10. inline int read(){
  11. int out=0,flag=1;char c=getchar();
  12. while(c<48||c>57) {if(c=='-') flag=-1;c=getchar();}
  13. while(c>=48&&c<=57){out=out*10+c-48;c=getchar();}
  14. return out*flag;
  15. }
  16.  
  17. int N,M,n;
  18.  
  19. int head[maxn],nedge=0;
  20. struct EDGE{
  21. int to,w,next;
  22. }edge[maxm];
  23.  
  24. inline void build(int a,int b,int w){
  25. edge[nedge]=(EDGE){b,w,head[a]};
  26. head[a]=nedge++;
  27. edge[nedge]=(EDGE){a,w,head[b]};
  28. head[b]=nedge++;
  29. }
  30.  
  31. void special(){
  32. int t=(N==1 ? M:N),Min=INF;
  33. for(int i=1;i<t;i++) Min=min(Min,read());
  34. printf("%d\n",Min);
  35. exit(0);
  36. }
  37.  
  38. void init(){
  39. fill(head,head+maxn,-1);
  40. N=read();
  41. M=read();
  42. if(N==1||M==1) special();
  43. n=(N-1)*(M-1)*3+N+M-N*M;
  44. for(int i=1;i<=N;i++){
  45. for(int j=1;j<M;j++){
  46. if(i==1) build(2*(j-1)+1,n,read());
  47. else if(i==N) build(2*(i-2)*(M-1)+2*(j-1)+2,0,read());
  48. else build(2*(i-2)*(M-1)+2*(j-1)+2,2*(i-1)*(M-1)+2*(j-1)+1,read());
  49. }
  50. }
  51. for(int i=1;i<N;i++){
  52. for(int j=1;j<=M;j++){
  53. if(j==1) build(2*(i-1)*(M-1)+2,0,read());
  54. else if(j==M) build(2*i*(M-1)-1,n,read());
  55. else build(2*(i-1)*(M-1)+2*(j-1)-1,2*(i-1)*(M-1)+2*(j-1)+2,read());
  56. }
  57. }
  58. for(int i=1;i<N;i++)
  59. for(int j=1;j<M;j++){
  60. build(2*(i-1)*(M-1)+2*(j-1)+1,2*(i-1)*(M-1)+2*(j-1)+2,read());
  61. }
  62. }
  63.  
  64. struct node{
  65. int u,v;
  66. };
  67.  
  68. inline bool operator <(const node& a,const node& b){
  69. return a.v>b.v;
  70. }
  71.  
  72. int d[maxn];
  73. bool vis[maxn];
  74.  
  75. void dijkstra(){
  76. fill(d,d+maxn,INF);
  77. priority_queue<node> q;
  78. q.push((node){0,0});
  79. d[0]=0;
  80. node u;
  81. int to;
  82. while(!q.empty()){
  83. u=q.top();
  84. q.pop();
  85. if(vis[u.u]) continue;
  86. vis[u.u]=true;
  87. for(int k=head[u.u];k!=-1;k=edge[k].next){
  88. if(!vis[to=edge[k].to]&&d[to]>d[u.u]+edge[k].w){
  89. d[to]=d[u.u]+edge[k].w;
  90. q.push((node){to,d[to]});
  91. }
  92. }
  93. }
  94. }
  95.  
  96. void print(){
  97. printf("%d\n",d[n]);
  98. }
  99.  
  100. int main(){
  101. init();
  102. dijkstra();
  103. print();
  104. return 0;
  105. }

S-T平面图的更多相关文章

  1. [BZOJ1997][HNOI2010] 平面图判定

    Description Input Output     是的..BZOJ样例都没给.     题解(from 出题人): 如果只考虑简单的平面图判定,这个问题是非常不好做的. 但是题目中有一个条件— ...

  2. 【BZOJ 3051】【UOJ #57】【WC 2013】平面图

    http://www.lydsy.com/JudgeOnline/problem.php?id=3051 http://uoj.ac/problem/57 这道题需要平面图转对偶图,点定位,最小生成树 ...

  3. bzoj3051: [wc2013]平面图

    Description Input Output 扫描线求出平面图的对偶图然后求最小生成树,用并查集按秩合并,以便查询两点间路径最大权 #include<stdio.h> #include ...

  4. 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2095  Solved: 1002[Submit][Status] ...

  5. 【BZOJ-4423】Bytehattan 并查集 + 平面图转对偶图

    4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 144  Solved: 103[Submit][ ...

  6. HDU3870 Catch the Theves(平面图最小割转最短路)

    题目大概说给一个n×n的方格,边有权值,问从求(1,1)到(n,n)的最小割. 点达到了160000个,直接最大流不好.这题的图是平面图,求最小割可以转化成求其对偶图的最短路,来更高效地求解: 首先源 ...

  7. BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)

    题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  8. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  9. BZOJ 2007 海拔(平面图最小割-最短路)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2007 题意:给出一个n*n的格子,那么顶点显然有(n+1)*(n+1)个.每两个相邻顶点 ...

  10. LA 3263 (平面图的欧拉定理) That Nice Euler Circuit

    题意: 平面上有n个端点的一笔画,最后一个端点与第一个端点重合,即所给图案是闭合曲线.求这些线段将平面分成多少部分. 分析: 平面图中欧拉定理:设平面的顶点数.边数和面数分别为V.E和F.则 V+F- ...

随机推荐

  1. 对posintion属性的简单认识,对于还在纠结的同学们,有一定的帮助

      position的四个属性值: relative ,absolute ,fixed,static 下面分别讲述这四个属性,以简单代码表示 <div id="parent" ...

  2. JS 中屏幕、浏览器和文档的高度、宽度和距离

    1.各种对象 window.screen - 屏幕,window - 窗口,document.documentElement & document.body.parentNode - 文档,d ...

  3. youtube高清视频下载方法

    youtube下载方法有多种, 但都不支持1080P以上的高清下载, 今天找到一种支持1080P的, 记录一下 步骤1: 百度搜: Dooseen tubedown 下载该软件, 并安装, 一直下一步 ...

  4. xampp服务器搭建和使用

    1.安装完XAMPP后会出现Apache端口被占用的问题,一下方法解决 错误信息如下: Error: Apache shutdown unexpectedly. 9:37:01  [Apache] T ...

  5. JAVA基础学习之路(九)[2]String类常用方法

    字符与字符串: 1.将字符数组变为字符串(构造方法) public String(char[] value) Allocates a new String so that it represents ...

  6. JavaScript学习笔记(五)——类型、转换、相等、字符串

    第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...

  7. libCurl 初步认识 - cur easy

    cur easy接口简洁明了,主接口4个,辅接口5个. 主接口 初始化 + 配参数 + 执行 + 销毁 初始化 CURL* curl_easy_init() 获得CURL句柄,返回值需要判空. 配参数 ...

  8. [咸恩静][Coffee House]

    歌词来源:http://music.163.com/#/song?id=5400159 하루의 시작은 향긋한 커피 [ha-lu-e xi-ja-geun hyang-geu-Tan Keo-Pi] ...

  9. We are writing to let you know we have removed your selling privileges

     Hello, We are writing to let you know we have removed your selling privileges, canceled your listin ...

  10. ASP.NET Web API - 使用 Castle Windsor 依赖注入

    示例代码 项目启动时,创建依赖注入容器 定义一静态容器 IWindsorContainer private static IWindsorContainer _container; 在 Applica ...