Submission #5915181


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

#define _for(i,j,N) for(int i = (j);i < (N);i++)
#define _rep(i,j,N) for(int i = (j);i <= (N);i++)
#define ALL(x) x.begin(),x.end()
#define pb push_back
#define mk make_pair

typedef long long LL;
typedef pair<int,int> pi;

template<typename T>
ostream& operator<<(ostream& os,const vector<T>& v) {
    _for(i,0,v.size()) os << v[i] << " ";
    return os;
}

template<typename T>
ostream& operator<<(ostream& os,const set<T>& v){
    for(typename set<T>::iterator it = v.begin();it != v.end();it++)
    os << *it <<" ";
    return os;
}

template<typename T1,typename T2>
ostream& operator<<(ostream& os,const pair<T1,T2>& v){
    os << v.first <<" "<<v.second<<endl;
    return os;
}

const int maxn= 205;
const int maxm = 3e4+ 5;
const int INF = 1e4+5;



struct Dinic{
    struct Edge{
        int from,to,cap,flow;
        Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){;}
    };
    int n,m,s,t;
    vector<Edge> edges;
    vector<int> G[maxn];
    bool vis[maxn];
    int d[maxn];
    int cur[maxn];

    void AddEdge(int from,int to,int cap){
        edges.push_back(Edge(from,to,cap,0));
        edges.push_back(Edge(to,from,0,0));
        m = edges.size();
        G[from].push_back(m-2);
        G[to].push_back(m-1);
    }


    bool BFS(){
        memset(vis,0,sizeof(vis));
        queue<int> Q;
        Q.push(s);
        d[s] = 0;
        vis[s] = 1;
        while(!Q.empty()){
            int x = Q.front();Q.pop();
            _for(i,0,G[x].size()){
                Edge e = edges[G[x][i]];
                if(!vis[e.to] && e.cap > e.flow){
                    vis[e.to] = 1;
                    d[e.to] = d[x]+1;
                    Q.push(e.to);
                }
            }
        }
        return vis[t];
    }

    int DFS(int x,int a){
        if(x == t || a == 0) return a;
        int flow = 0,f;
        for(int &i = cur[x];i < G[x].size();i++){
            Edge &e = edges[G[x][i]];
            if(d[x] + 1 == d[e.to] && (f = DFS(e.to,min(a,e.cap-e.flow))) > 0){
                e.flow += f;
                edges[G[x][i]^1].flow -= f;
                flow += f;
                a -= f;
                if(a == 0) break;
            }
        }
        return flow;
    }

    int Maxflow(int s,int t){
        this->s = s;this->t = t;
        int flow = 0;
        while(BFS()){
            memset(cur,0,sizeof(cur));
            flow += DFS(s,INF);
            //cout << flow << endl;
        }
        return flow;
    }

};

int H,W;
char G[maxn][maxn];

int stx,sty,edx,edy;

int ans;

int get_x(int x) {return x+1;}
int get_y(int y) {return H+1+y;}

int main()
{
    cin >> H >> W;
    getchar();
    _for(i,0,H){
        fgets(G[i],maxn,stdin);
    }

     Dinic maxf;
     //maxf.init(maxn);
     int ed = H+W+1;

    _for(i,0,H){
        _for(j,0,W){
            if(G[i][j] == 'S'){
                maxf.AddEdge(0,get_x(i),INF);
                maxf.AddEdge(0,get_y(j),INF);
                stx = i;sty = j;
            }
            else if(G[i][j] == 'T'){
                maxf.AddEdge(get_x(i),ed,INF);
                maxf.AddEdge(get_y(j),ed,INF);
                edx = i;edy = j;
            }
            else if(G[i][j] == 'o'){
                maxf.AddEdge(get_x(i),get_y(j),1);
                maxf.AddEdge(get_y(j),get_x(i),1);
            }
        }
    }


    if(stx == edx || sty == edy){
        printf("-1\n");
        return 0;
    }

    cout << maxf.Maxflow(0,ed) << endl;

    return 0;
}

Submission Info

Submission Time
Task F - Lotus Leaves
User youenn98
Language C++14 (GCC 5.4.1)
Score 800
Code Size 3668 Byte
Status AC
Exec Time 3 ms
Memory 1528 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:124:31: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
         fgets(G[i],maxn,stdin);
                               ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 4
AC × 54
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt, 1_37.txt, 1_38.txt, 1_39.txt, 1_40.txt, 1_41.txt, 1_42.txt, 1_43.txt, 1_44.txt, 1_45.txt, 1_46.txt, 1_47.txt, 1_48.txt, 1_49.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KB
0_01.txt AC 1 ms 256 KB
0_02.txt AC 1 ms 256 KB
0_03.txt AC 1 ms 256 KB
1_00.txt AC 1 ms 256 KB
1_01.txt AC 1 ms 256 KB
1_02.txt AC 1 ms 256 KB
1_03.txt AC 1 ms 256 KB
1_04.txt AC 1 ms 256 KB
1_05.txt AC 2 ms 892 KB
1_06.txt AC 3 ms 1528 KB
1_07.txt AC 1 ms 256 KB
1_08.txt AC 2 ms 892 KB
1_09.txt AC 2 ms 1528 KB
1_10.txt AC 2 ms 512 KB
1_11.txt AC 2 ms 512 KB
1_12.txt AC 1 ms 256 KB
1_13.txt AC 2 ms 640 KB
1_14.txt AC 2 ms 640 KB
1_15.txt AC 2 ms 640 KB
1_16.txt AC 2 ms 512 KB
1_17.txt AC 2 ms 640 KB
1_18.txt AC 2 ms 512 KB
1_19.txt AC 2 ms 640 KB
1_20.txt AC 2 ms 640 KB
1_21.txt AC 1 ms 384 KB
1_22.txt AC 2 ms 640 KB
1_23.txt AC 2 ms 640 KB
1_24.txt AC 1 ms 384 KB
1_25.txt AC 2 ms 640 KB
1_26.txt AC 2 ms 640 KB
1_27.txt AC 2 ms 512 KB
1_28.txt AC 2 ms 512 KB
1_29.txt AC 2 ms 640 KB
1_30.txt AC 2 ms 640 KB
1_31.txt AC 2 ms 892 KB
1_32.txt AC 2 ms 640 KB
1_33.txt AC 1 ms 256 KB
1_34.txt AC 2 ms 640 KB
1_35.txt AC 2 ms 640 KB
1_36.txt AC 2 ms 640 KB
1_37.txt AC 2 ms 640 KB
1_38.txt AC 2 ms 640 KB
1_39.txt AC 2 ms 640 KB
1_40.txt AC 1 ms 384 KB
1_41.txt AC 2 ms 640 KB
1_42.txt AC 1 ms 256 KB
1_43.txt AC 1 ms 512 KB
1_44.txt AC 1 ms 256 KB
1_45.txt AC 1 ms 512 KB
1_46.txt AC 1 ms 384 KB
1_47.txt AC 1 ms 256 KB
1_48.txt AC 2 ms 640 KB
1_49.txt AC 2 ms 640 KB