• bzoj 2007: [Noi2010]海拔


     1 #include<cstdio>
     2 #include<iostream>
     3 #include<queue>
     4 #include<cstring>
     5 #define pa pair<int,int>
     6 #define M 250005
     7 using namespace std;
     8 int S,T,cnt=1,ans,head[M],next[10*M],u[10*M],v[10*M],d[M],f[M],n;
     9 int p(int a1,int a2)
    10 {
    11     if(!a1||a2>n)
    12       return T;
    13     if(!a2||a1>n)
    14       return S;
    15     return (a1-1)*n+a2;
    16 }
    17 void jia(int a1,int a2,int a3)
    18 {
    19     cnt++;
    20     next[cnt]=head[a1];
    21     head[a1]=cnt;
    22     u[cnt]=a2;
    23     v[cnt]=a3;
    24 }
    25 int main()
    26 {
    27     scanf("%d",&n);
    28     S=0;
    29     T=n*n+1;
    30     for(int i=1;i<=n+1;i++)
    31       for(int j=1;j<=n;j++)
    32         {
    33             int a1;
    34             scanf("%d",&a1);
    35             jia(p(i,j),p(i-1,j),a1);
    36         }
    37     for(int i=1;i<=n;i++)
    38       for(int j=1;j<=n+1;j++)
    39         {
    40             int a1;
    41             scanf("%d",&a1);
    42             jia(p(i,j-1),p(i,j),a1); 
    43         }  
    44     for(int i=1;i<=n+1;i++)
    45       for(int j=1;j<=n;j++)
    46         {
    47             int a1;
    48             scanf("%d",&a1);
    49             jia(p(i-1,j),p(i,j),a1);
    50         }
    51     for(int i=1;i<=n;i++)
    52       for(int j=1;j<=n+1;j++)
    53         {
    54             int a1;
    55             scanf("%d",&a1);
    56             jia(p(i,j),p(i,j-1),a1);
    57         }
    58     priority_queue<pa,vector<pa>,greater<pa> >q;
    59     memset(d,60,sizeof(d));
    60     q.push(make_pair(0,S));
    61     d[0]=0;
    62     for(;!q.empty();)
    63       {
    64         int p=q.top().second;
    65         q.pop();
    66         if(f[p])
    67           continue;
    68         f[p]=1;
    69         for(int i=head[p];i;i=next[i])
    70           if(d[u[i]]>d[p]+v[i])
    71             {
    72                 d[u[i]]=d[p]+v[i];
    73                 q.push(make_pair(d[u[i]],u[i]));
    74             }
    75       }
    76     printf("%d
    ",d[T]);
    77     return 0;
    78 }

    看一看像网络流的最小割,可跑网络流超时,网络流的最小割就等于对偶图的最短路,把图转化为对偶图之后跑最短路就不超时了,可是我的平面图转对偶图还不是太会wuwu。

  • 相关阅读:
    IDEA、Eclipse快捷键对比
    linux常见命令
    拷贝本地文件到远程服务器的批处理脚本
    关系型数据库的超键、候选键、主键
    JAVA运算符总结
    JAVA原码反码补码
    JPA查询语句(转载)
    Spring Data JPA初使用(转载)
    android学习————项目导入常见错误整理(转载)
    Spring 系列: Spring 框架简介
  • 原文地址:https://www.cnblogs.com/xydddd/p/5293944.html
Copyright © 2020-2023  润新知