ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P2046 [NOI2010]海拔

2019-06-08 20:52:02  阅读:300  来源: 互联网

标签:ch edg vis int tot P2046 海拔 NOI2010 dis


题面

容易想到原图由海拔高度划分成两大连通块。

于是就可以套上最小割了。

由于点数过多,可以将网络流最小割转换为其对偶图最短路。

 

#include<bits/stdc++.h>
using namespace std;
int read()
{
    int x=0,f=1;    char ch=getchar();
    while(ch<'0'||ch>'9')    {if(ch=='-')    f=-1;    ch=getchar();}
    while(ch>='0'&&ch<='9')    {x=(x<<3)+(x<<1)+(ch^48);    ch=getchar();}
    return x*f;
}
int n,cnt=2;
int col[505][505],tot,dis[1000050];
int head[1000050],nex[2000050],ver[2000050],edg[2000050];
priority_queue<pair<int ,int > >q;
bool vis[1000050];
void add(int x,int y,int z)
{
    ++tot;nex[tot]=head[x];head[x]=tot;ver[tot]=y;edg[tot]=z;
}
void spfa()
{
    memset(dis,127/2,sizeof(dis));
    dis[1]=0;    q.push(make_pair(0,1));
    while(!q.empty())
    {
        int u=q.top().second;
        q.pop();    vis[u]=false;
        for(int i=head[u];i;i=nex[i])
        {
            int v=ver[i];
            if(dis[v]>dis[u]+edg[i])
            {
                dis[v]=dis[u]+edg[i];
                if(!vis[v])
                {
                    vis[v]=true;
                    q.push(make_pair(-dis[v],v));
                }
            }
        }
    }
}
int main()
{
    n=read();
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            col[i][j]=++cnt;
    for(int i=1;i<=n;++i)
        col[i][0]=col[n+1][i]=1;
    for(int i=1;i<=n;++i)
        col[0][i]=col[i][n+1]=2;
    for(int i=1;i<=n+1;++i)
        for(int j=1;j<=n;++j)
            add(col[i][j],col[i-1][j],read());
    for(int i=1;i<=n;++i)
        for(int j=0;j<=n;++j)
            add(col[i][j],col[i][j+1],read());
    for(int i=0;i<=n;++i)
        for(int j=1;j<=n;++j)
            add(col[i][j],col[i+1][j],read());
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n+1;++j)
            add(col[i][j],col[i][j-1],read());
    spfa();        printf("%d",dis[2]);
    return 0;
}
View Code

 

标签:ch,edg,vis,int,tot,P2046,海拔,NOI2010,dis
来源: https://www.cnblogs.com/wyher/p/10991624.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有