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
2019-06-15 17:26:50+0900
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
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