建立平面图的对偶图,把最小割转化成最短路问题

Dijkstra算法堆优化

(被输入顺序搞WA了好几次T_T)

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <queue>
  5.  
  6. ;
  7. const int maxV=maxN*maxN;
  8. const int inf=0x3f3f3f3f;
  9.  
  10. struct Edge
  11. {
  12. int to,next;
  13. int dist;
  14. void assign(int t,int n,int d)
  15. { to=t; next=n; dist=d; }
  16. };
  17.  
  18. Edge elist[maxV*];
  19. int head[maxV];
  20. int ecnt;
  21. int N;
  22. int dest;
  23.  
  24. void initEdge()
  25. {
  26. memset(head,-,sizeof(head));
  27. ecnt=;
  28. }
  29.  
  30. inline void addEdge(int from,int to,int dist)
  31. {
  32. elist[ecnt].assign(to,head[from],dist);
  33. head[from]=ecnt++;
  34. }
  35.  
  36. void input()
  37. {
  38. scanf("%d",&N);
  39. dest=N*N+;
  40. initEdge();
  41. int w;
  42. ;j<=N;j++)
  43. ;i<=N;i++)
  44. {
  45. scanf("%d",&w);
  46. ,i,w);
  47. else if(j==N) addEdge(N*N+i-N,dest,w);
  48. else addEdge(N*j+i-N,N*j+i,w);
  49. }
  50. ;j<=N;j++)
  51. ;i<=N;i++)
  52. {
  53. scanf("%d",&w);
  54. -N,dest,w);
  55. ,N*j,w);
  56. -N,N*j+i-N,w);
  57. }
  58. ;j<=N;j++)
  59. ;i<=N;i++)
  60. {
  61. scanf("%d",&w);
  62. if(!j || j==N) continue;
  63. else addEdge(N*j+i,N*j+i-N,w);
  64. }
  65. ;j<=N;j++)
  66. ;i<=N;i++)
  67. {
  68. scanf("%d",&w);
  69. if(!i || i==N) continue;
  70. -N,w);
  71. }
  72. }
  73.  
  74. struct Vertex
  75. {
  76. int idx;
  77. int dist;
  78. Vertex() {}
  79. Vertex(int i,int d):idx(i),dist(d) {}
  80. bool operator < (const Vertex& other) const
  81. { return this->dist > other.dist; }
  82. };
  83.  
  84. int dist[maxV];
  85. int open[maxV];
  86. std::priority_queue<Vertex> que;
  87.  
  88. int dijkstra()
  89. {
  90. memset(dist,0x3f,sizeof(dist));
  91. memset(open,,sizeof(open));
  92. dist[]=; open[]=false;
  93. ;
  94. while(cur!=dest)
  95. {
  96. ;e=elist[e].next)
  97. {
  98. int& to=elist[e].to;
  99. int& len=elist[e].dist;
  100. if(open[to] && dist[to]>dist[cur]+len)
  101. {
  102. dist[to]=dist[cur]+len;
  103. que.push(Vertex(to,dist[to]));
  104. }
  105. }
  106. Vertex vt;
  107. do { vt=que.top(); que.pop(); }
  108. while(!open[vt.idx]);
  109. cur=vt.idx;
  110. open[cur]=false;
  111. }
  112. return dist[dest];
  113. }
  114.  
  115. int main()
  116. {
  117. input();
  118. printf("%d\n",dijkstra());
  119. ;
  120. }

Vijos1734 NOI2010 海拔 平面图最小割的更多相关文章

  1. bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)

    bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj  luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...

  2. BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路

    问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...

  3. BZOJ 2007 海拔(平面图最小割转对偶图最短路)

    首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...

  4. 洛谷P2046 [NOI2010]海拔(最小割,平面图转对偶图)

    传送门 不明白为什么大佬们一眼就看出这是最小割…… 所以总而言之这就是一个最小割我也不知道为什么 然后边数太多直接跑会炸,所以要把平面图转对偶图,然后跑一个最短路即可 至于建图……请看代码我实在无能为 ...

  5. bzoj 2007: [Noi2010]海拔【最小割+dijskstra】

    上来就跑3e5的最大流--脑子抽了 很容易看出,每个地方的海拔都是0或1因为再高了没有意义,又,上去下来再上去没有意义,所以最后一定是从s连着一片0,剩下连着t一片1,然后有贡献的就是01交接的那些边 ...

  6. B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij

    B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...

  7. 【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)

    [BZOJ2007][NOI2010]海拔(最小割,平面图转对偶图,最短路) 题面 BZOJ 洛谷 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域. ...

  8. [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】

    题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...

  9. Luogu2046 NOI2010 海拔 平面图、最小割、最短路

    传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...

随机推荐

  1. bzoj1816

    这道题不是很难,二分答案+判定即可 注意在一套牌中Joker只能用一次 ..] of longint;     mid,l,r,n,m,i,ans:longint; function check(x: ...

  2. OA请假流程 -- 编码

    OA请假流程 -- 编码 凡是内容不会发生变化的,都要写在xml配置文件中.需要定义如下内容: <process>标签 id英文命名 和 name 中文命名,然后只要与该流程相关的资源均以 ...

  3. (转载)shell变量基础—shell自定义变量

    (转载)http://see.xidian.edu.cn/cpp/html/1494.html 一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...

  4. DSP知识

    自己认为是问题的问题,时常更新,为了记录学习的点点滴滴. 1.什么是boot loader ? DSP 的速度尽快,EPROM 或flash 的速度较慢, 而DSP 片内的RAM很快, 片外的RAM也 ...

  5. Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal

    调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...

  6. hdu 4750 Count The Pairs(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4750 代码: #include<cstdio> #include<cstring&g ...

  7. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署

  8. 洛谷 P1005 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  9. javascript正则表达式简述

    compile 编译或改变字符串,参数跟new RegExp相同 var patt = /man/g; var str = "man and woman"; str.replace ...

  10. JSNI GWT中的东东

    二.JavaScript Native InterfaceJavaScript本地接口JSNI.1)声明一个本地方法在JSNI中声明一个本地方法时,使用Java的标准native关键字,就像在JNI( ...