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

Dijkstra算法堆优化

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

 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 #include <queue>

 ;
 const int maxV=maxN*maxN;
 const int inf=0x3f3f3f3f;

 struct Edge
 {
     int to,next;
     int dist;
     void assign(int t,int n,int d)
         { to=t; next=n; dist=d; }
 };

 Edge elist[maxV*];
 int head[maxV];
 int ecnt;
 int N;
 int dest;

 void initEdge()
 {
     memset(head,-,sizeof(head));
     ecnt=;
 }

 inline void addEdge(int from,int to,int dist)
 {
     elist[ecnt].assign(to,head[from],dist);
     head[from]=ecnt++;
 }

 void input()
 {
     scanf("%d",&N);
     dest=N*N+;
     initEdge();
     int w;
     ;j<=N;j++)
         ;i<=N;i++)
         {
             scanf("%d",&w);
             ,i,w);
             else if(j==N) addEdge(N*N+i-N,dest,w);
             else addEdge(N*j+i-N,N*j+i,w);
         }
     ;j<=N;j++)
         ;i<=N;i++)
         {
             scanf("%d",&w);
             -N,dest,w);
             ,N*j,w);
             -N,N*j+i-N,w);
         }
     ;j<=N;j++)
         ;i<=N;i++)
         {
             scanf("%d",&w);
             if(!j || j==N) continue;
             else addEdge(N*j+i,N*j+i-N,w);
         }
     ;j<=N;j++)
         ;i<=N;i++)
         {
             scanf("%d",&w);
             if(!i || i==N) continue;
             -N,w);
         }
 }

 struct Vertex
 {
     int idx;
     int dist;
     Vertex() {}
     Vertex(int i,int d):idx(i),dist(d) {}
     bool operator < (const Vertex& other) const
         { return this->dist > other.dist; }
 };

 int dist[maxV];
 int open[maxV];
 std::priority_queue<Vertex> que;

 int dijkstra()
 {
     memset(dist,0x3f,sizeof(dist));
     memset(open,,sizeof(open));
     dist[]=; open[]=false;
     ;
     while(cur!=dest)
     {
         ;e=elist[e].next)
         {
             int& to=elist[e].to;
             int& len=elist[e].dist;
             if(open[to] && dist[to]>dist[cur]+len)
             {
                 dist[to]=dist[cur]+len;
                 que.push(Vertex(to,dist[to]));
             }
         }
         Vertex vt;
         do { vt=que.top(); que.pop(); }
         while(!open[vt.idx]);
         cur=vt.idx;
         open[cur]=false;
     }
     return dist[dest];
 }

 int main()
 {
     input();
     printf("%d\n",dijkstra());
     ;
 }

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. apple ID的重要性

    当手机丢失时,您可以将对应的产品码提供给运营商,提高找回丢失手机的可能性.         2.去App store下载“查找我的iPhone(Find My iPhone)”,立刻安上,用你的app ...

  2. robotium源码方法备注---clicker.java

    1.clickOnScreen(float x,float y) 在屏幕上点击一个指定的区域(x,y)横纵坐标 2.clickLongOnScreen(float x,float y, int tim ...

  3. HDOJ/HDU 2566 统计硬币(公式~遍历~)

    Problem Description 假设一堆由1分.2分.5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0). Input 输入数据第一行有一个正整数T ...

  4. Java---网络蜘蛛-网页邮箱抓取器~源码

    刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎.资讯采集.舆情监测等等,诸如此类.网络爬虫涉及 ...

  5. 适配器模式 java

    结构模式:将类和对象结合在一起构成更大的结构,就像是搭积木. 1.适配器模式 源接口---适配器--目标接口 2.使用场景: 现在你有一个很古老的类,里面的一些方法很有用,你如何使用这些方法? 当然你 ...

  6. poj 2505 A multiplication game(博弈)

    A multiplication game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5622   Accepted: ...

  7. Pick-up sticks - POJ 2653 (线段相交)

    题目大意:有一个木棒,按照顺序摆放,求出去上面没有被别的木棍压着的木棍.....   分析:可以维护一个队列,如果木棍没有被压着就入队列,如果判断被压着,就让那个压着的出队列,最后把这个木棍放进队列, ...

  8. PDO 提供了三种不同的错误处理模式

    PDO::ERRMODE_SILENT 此为默认模式. PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错 ...

  9. 数据库事务的ACID和BASE

    ACID versus BASE for database transactions解释了ACID和BASE的区别.如下: ACID: (关系数据库) Atomic: 原子性,一个事务要么全部成功,要 ...

  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(21)-权限管理系统-跑通整个系统

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(21)-权限管理系统-跑通整个系统 这一节我们来跑通整个系统,验证的流程,通过AOP切入方式,在访问方法之 ...