比赛 |
20160418x |
评测结果 |
WWWWWEEEEE |
题目名称 |
wifi |
最终得分 |
0 |
用户昵称 |
asddddd |
运行时间 |
0.626 s |
代码语言 |
C++ |
内存使用 |
0.71 MiB |
提交时间 |
2016-04-18 17:00:00 |
显示代码纯文本
//
// main.cpp
// wifi
//
// Created by Qing Liu on 16/4/18.
// Copyright © 2016年 Qing Liu. All rights reserved.
//
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
#define inf 999999999
#define maxn 20740
using namespace std;
struct edge{
int to,cap,rev;
};
vector<edge>G[maxn];
void addedge(int from,int to,int cap){
G[from].push_back((edge){to,cap,(int)G[to].size()});
G[to].push_back((edge){from,0,(int)G[from].size()-1});
}
int level[maxn],ltr[maxn];
void BFS(int s){
bool inq[maxn];
memset(inq,0,sizeof(inq));
memset(level,-1,sizeof(level));
memset(ltr, 0, sizeof(ltr));
level[s]=0;
queue<int>que;
que.push(s);
while(!que.empty()){
int k=que.front();
que.pop();
for(int i=0;i<G[k].size();i++){
edge &e=G[k][i];
if(level[e.to]==-1&&e.cap>0){
level[e.to]=level[k]+1;
que.push(e.to);
}
}
}
}
int DFS(int s,int t,int f){
if(s==t)
return f;
for(int &i=ltr[s];i<G[s].size();i++){
edge &e=G[s][i];
if(e.cap>0&&level[e.to]>level[s]){
int d=DFS(e.to,t,min(e.cap,f));
if(d>0){
e.cap-=d;
G[e.to][e.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t){
int ans=0;
BFS(s);
while(level[t]!=-1){
int f=DFS(s, t, inf);
while(f>0){
ans+=f;
f=DFS(s, t, inf);
}
BFS(s);
}
return ans;
}
int n,m,a,b;
void init(){
cin>>n>>m>>a>>b;
for(int i=0;i<n;i++){
for (int j=1; j<=m; j++) {
int temp;
cin>>temp;
addedge(i*m+j, m*n+j+i*m, temp);
}
}
for (int i=0; i<a; i++) {
int x1,x2,y1,y2,z;
cin>>x1>>x2>>y1>>y2>>z;
addedge(0, a+2+m*2*n, z);
for (int k=x1-1; k<x2; k++) {
for(int j=y1;j<=y2;j++){
addedge(a+2+m*n*2,k*m+j, inf);
}
}
}
for (int i=0;i<b;i++){
int x1,x2,y1,y2,z;
cin>>x1>>x2>>y1>>y2>>z;
addedge(a+i+2+m*n*2, 2*m*n+1, z);
for (int k=x1-1; k<x2; k++) {
for(int j=y1;j<=y2;j++){
addedge(m*n+i*n+j, a+i+2+m*n*2, inf);
}
}
}
cout<<max_flow(0, 2*m*n+1);
}
int main() {
ios::sync_with_stdio(0);
freopen("wifi.in", "r", stdin);
freopen("wifi.out", "w", stdout);
init();
return 0;
}