zoukankan      html  css  js  c++  java
  • 游戏

    横的联通快为入,竖的为出。

    样例的图就像这样:

    S->a1,a2,a3,a4,a5

    a1->2,3,4  a2->5  a3->7,8  a4->9,10  a5->12

    5,9->b1  2->b2  10->b3  3,7->b4  4,8,12->b5

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 1e9
    const int maxn=1e4+10;
    int n,m,cnt;
    int g[100][100];
    int beg[maxn],nex[maxn],to[maxn],w[maxn],e;
    inline void add(int x,int y,int z){
        nex[e]=beg[x];beg[x]=e;
        to[e]=y;w[e]=z;e++;
    }
    int dep[maxn];
    queue<int>q;
    inline int bfs(){
        memset(dep,0x3f,sizeof(dep));
        while(!q.empty())q.pop();
        dep[0]=0;
        q.push(0);
        while(!q.empty()){
            int x=q.front();
            q.pop();
            for(int i=beg[x];~i;i=nex[i]){
                int t=to[i];
                if(w[i]&&dep[t]>5000){
                    dep[t]=dep[x]+1;
                    q.push(t);
                }
            }
        }
        return dep[5000]<=5000;
    }
    inline int dfs(int x,int lim){
        if(x==5000||!lim)return lim;
        int ans=0;
        for(int i=beg[x];~i;i=nex[i]){
            int t=to[i];
            if(dep[t]==dep[x]+1){
                int f=dfs(t,min(lim,w[i]));
                ans+=f;lim-=f;
                w[i]-=f;w[i^1]+=f;
            }
        }
        return ans;
    }
    int main(){
        memset(beg,-1,sizeof(beg));
        cin>>n>>m;
        string s;
        for(int i=1;i<=n;i++){
            cin>>s;
            for(int j=1;j<=m;j++){
                if(s[j-1]=='*')g[i][j]=1;
                if(s[j-1]=='x')g[i][j]=2;
                if(s[j-1]=='#')g[i][j]=3;
            }
        }
        cnt=n*m;
        for(int i=1;i<=n;i++){
            cnt++;
            add(0,cnt,1);
            add(cnt,0,0);
            for(int j=1;j<=m;j++){
                if(g[i][j]==1){
                    add(cnt,(i-1)*m+j,inf);
                    add((i-1)*m+j,cnt,0);
                }
                if(g[i][j]==2)continue;
                if(g[i][j]==3){
                    cnt++;
                    add(0,cnt,1);
                    add(cnt,0,0);
                }
            }
        }
        for(int i=1;i<=m;i++){
            cnt++;
            add(cnt,5000,1);
            add(5000,cnt,0);
            for(int j=1;j<=n;j++){
                if(g[j][i]==1){
                    add((j-1)*m+i,cnt,inf);
                    add(cnt,(j-1)*m+i,0);
                }
                if(g[j][i]==2)continue;
                if(g[j][i]==3){
                    cnt++;
                    add(cnt,5000,1);
                    add(5000,cnt,0);
                }
            }
        }
        int maxflow=0;
        while(bfs())maxflow+=dfs(0,inf);
        printf("%d
    ",maxflow);
        return 0;
    }

    深深地感到自己的弱小。

  • 相关阅读:
    geoserver 地图性能和缓存
    geoserver PostGIS的安装和使用
    geoserver 数据图层输出格式
    Centos7Yum安装配置指定版本nginx
    Centos7Yum安装PHP7.2
    CentOS7 中把默认yum源更换成163源
    安装配置Elasticserch的方法
    redis的持久化(RDB&AOF的区别)
    LayerDate渲染多个class出现闪现问题的解决
    explain分析SQL语句详解
  • 原文地址:https://www.cnblogs.com/syzf2222/p/12431431.html
Copyright © 2011-2022 走看看