【Luogu】P2445动物园(最大流)
题目本身还是比较水的吧……容易发现是最大流套上dinic跑一遍就好了,并不会超时。
比较不偷税的一点是关于某动物的所有目击报告都符合才能连边……qwqqwqqwq
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<queue>
#define maxn 1000
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int u[]={,,,,-};
int w[]={,,,-,}; struct Edge{
int next,to,val;
}edge[maxn*];
int head[maxn],num;
inline void addedge(int from,int to,int val){
edge[++num]=(Edge){head[from],to,val};
head[from]=num;
}
inline void add(int from,int to,int val){
addedge(from,to,val);
addedge(to,from,);
} inline int count(int i){ return i&?i+:i-; } int pre[maxn];
int Start,End;
bool vis[maxn];
int dfn[maxn];
int list[maxn]; bool bfs(){
memset(vis,,sizeof(vis)); dfn[Start]=; vis[Start]=;
queue<int>q; q.push(Start);
while(!q.empty()){
int from=q.front(); q.pop();
for(int i=head[from];i;i=edge[i].next){
int to=edge[i].to;
if(vis[to]||edge[i].val<=) continue;
vis[to]=; dfn[to]=dfn[from]+;
q.push(to);
}
}
return vis[End];
} int dfs(int x,int val){
if(val==||x==End) return val;
vis[x]=; int flow=;
for(int &i=list[x];i;i=edge[i].next){
int to=edge[i].to;
if(vis[to]||dfn[to]!=dfn[x]+||edge[i].val<=) continue;
int now=dfs(to,min(val,edge[i].val));
if(x!=End) pre[to]=x; edge[i].val-=now; edge[count(i)].val+=now; val-=now; flow+=now;
if(val<=) break;
}
if(val!=flow) dfn[x]=-;
return flow;
} inline int maxflow(){
int ans=;
while(bfs()){
memset(vis,,sizeof(vis));
for(int i=Start;i<=End;++i) list[i]=head[i];
int now=dfs(Start,0x7fffffff);
if(now==) break;
ans+=now;
}
return ans;
} int s[maxn][maxn];
char c[maxn];
bool ext[maxn][maxn];
int dis[][][];
int v[maxn];
bool exa[maxn];
int f[maxn][maxn];
int sum[maxn]; struct Node{
int x,y;
}que[maxn]; int main(){
memset(dis,/,sizeof(dis)); int inf=dis[][][];
int n=read();
for(int i=;i<=n;++i){
scanf("%s",c+);
for(int j=;j<=n;++j)
if(c[j]=='*') s[i][j]=;
else s[i][j]=;
}
int p=read(); End=p*+;
for(int i=;i<=p;++i) que[i]=(Node){read(),read()};
for(int i=;i<=p;++i){
add(Start,i,); add(i+p,End,);
queue<Node>q; q.push(que[i]); dis[i][que[i].x][que[i].y]=;
while(!q.empty()){
Node from=q.front(); q.pop();
//printf("%d %d %d<<<<<<<<\n",i,from.x,from.y);
for(int j=;j<;++j){
int nx=from.x+u[j];
int ny=from.y+w[j];
//printf("%d %d %d %d><>\n",nx,ny,s[nx][ny],dis[i][from.x][from.y]);
if(nx<||nx>n||ny<||ny>n||s[nx][ny]||dis[i][nx][ny]!=inf) continue;
dis[i][nx][ny]=dis[i][from.x][from.y]+;
q.push((Node){nx,ny});
}
}
}
for(int i=;i<=p;++i) v[i]=read();
int r=read();
for(int i=;i<=r;++i){
int t=read(),x=read(),y=read(),d=read(); sum[d]++;
for(int j=;j<=p;++j){
//printf("%d %d>>>\n",j,dis[j][x][y]);
int ret=v[d]*t;
if(ret>=dis[j][x][y]) f[j][d]++;
}
}
for(int i=;i<=p;++i)
for(int j=;j<=p;++j)
if(sum[i]==f[j][i]) add(j,i+p,);
maxflow();
for(int i=+p;i<End;++i){
for(int j=head[i];j;j=edge[j].next){
int to=edge[j].to;
if(to==End||edge[j].val==) continue;
printf("%d %d %d\n",i-p,que[to].x,que[to].y);
break;
}
}
return ;
}
【Luogu】P2445动物园(最大流)的更多相关文章
- luogu P3305 [SDOI2013]费用流
题目链接 bz似乎挂了... luogu P3305 [SDOI2013]费用流 题解 dalao告诉我,这题 似乎很水.... 懂了题目大意就可以随便切了 问1,最大流 问2,二分最大边权求,che ...
- Luogu P3305 [SDOI2013]费用流 二分 网络流
题目链接 \(Click\) \(Here\) 非常有趣的一个题目. 关键结论:所有的单位费用应该被分配在流量最大的边上. 即:在保证最大流的前提下,使最大流量最小.这里我们采用二分的方法,每次判断让 ...
- 【luogu P2936 [USACO09JAN]全流Total Flow】 题解
题目链接:https://www.luogu.org/problemnew/show/P2936 菜 #include <queue> #include <cstdio> #i ...
- 【luogu P3128 [USACO15DEC]最大流Max Flow】 题解
题目链接:https://www.luogu.org/problemnew/show/P3128 菜 #include <cstdio> #include <cstring> ...
- 【luogu P3376 网络最大流】 模板
题目链接:https://www.luogu.org/problemnew/show/P3376 #include <iostream> #include <cstdio> # ...
- luogu P3128 [USACO15DEC]最大流Max Flow (树上差分)
题目描述 Farmer John has installed a new system of N-1N−1 pipes to transport milk between the NN stalls ...
- [LUOGU] P3128 [USACO15DEC]最大流Max Flow
题意:一棵树,多次给指定链上的节点加1,问最大节点权值 n个点,n-1条边很容易惯性想成一条链,幸好有样例.. 简单的树剖即可!(划去) 正常思路是树上差分,毕竟它就询问一次.. #include&l ...
- [luogu P2375] [NOI 2014] 动物园
[luogu P2375] [NOI 2014] 动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向 ...
- Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流)
Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流) Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从 ...
随机推荐
- 洛谷 P2733 家的范围 Home on the Range
题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因为一些原因,他的奶牛只在正方形的牧场上吃草.)遗憾的是,他的奶牛已经毁坏一些土地.( 一 ...
- SAP ERP classification和C4C的同步
在ERP里创建两个characteristic: 创建一个class包这两个characteristic.Class type 002意为该class能用于equipment. replicate到C ...
- spring maven 包
<spring-framework.version>.RELEASE</spring-framework.version> <dependency> <gro ...
- 【转】HTTP Live Streaming直播(iOS直播)技术分析与实现
HTTP Live Streaming直播(iOS直播)技术分析与实现 不经意间发现,大半年没写博客了,自觉汗颜.实则2012后半年,家中的事一样接着一样发生,实在是没有时间.快过年了,总算忙里偷闲, ...
- 2018.5.14 PHP基础学习
1.使用PHP输出HTML 使用PHP输出一个表格,并且通过style标签改变字体 <!--思考与练习--> <style type="text/css"> ...
- Mybatis中关于OGNL表达式冲突
注意设计表字段不能用bor xor and band eq neq lt gt lte gte shl shr ushr
- 中英文字符串截取函数msubstr
Thinkphp内置了一个可以媲美smarty的模板引擎,给我们带来了很大的方便.调用函数也一样,可以和smarty一样调用自己需要的函数,而官方也内置了一些常用的函数供大家调用. 比如今天我们说的截 ...
- C# Dictionary 的几种遍历方法,排序
Dictionary<string, int> list = new Dictionary<string, int>(); list.Add(); //3.0以上版本 fore ...
- Github使用技巧总结
<config> PyCharm与GitHub配置使用总结 <readme> 在github的readme添加图片 github readme写法 GitHub上README. ...
- Mybatis 循环 foreach, 批量操作
mapper.java: int modifySortOfGoods(@Param("idlist") List<String> goodsIds, @Param(&q ...