[SDOI2005]动物园 匹配
一开始读错题以为动物不能停,,如果不能停的话就需要黑白染色原理、
这个题只需要广搜最短路判断后直接dinic就可以了
注:为保障程序兼容性。尽量用传统写法,如最短距离数组初始化为INF,而不是-1,不然判断会想当然出错
码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int tot=-1,i,j,n,m,yuan[100005],ky[105][105],xx[100005],bh[100005],gs[100005],yy[100005],D[100005],xs,ys,zhong[100005],xia[100005],v[100005],hou[100005],d[105][105],S,T,p,r,x[100005],y[100005],t[100005],daan[105];
char tu[105][105];
queue<int>q,qx,qy;
void jian(int a,int b,int c)
{++tot,hou[tot]=yuan[a],yuan[a]=tot,zhong[tot]=b,v[tot]=c;
}
void jia(int a,int b,int c)
{jian(a,b,c);jian(b,a,0);
}
void bfs()
{memset(d,-1,sizeof(d));qx.push(xs);qy.push(ys);d[xs][ys]=0;while(!qx.empty()) {int stx=qx.front(),sty=qy.front();qx.pop();qy.pop();if(sty>1&&tu[stx][sty-1]!='*'&&d[stx][sty-1]==-1){d[stx][sty-1]=d[stx][sty]+1; qx.push(stx);qy.push(sty-1);} if(stx>1&&tu[stx-1][sty]!='*'&&d[stx-1][sty]==-1){d[stx-1][sty]=d[stx][sty]+1; qx.push(stx-1);qy.push(sty);} if(sty<n&&tu[stx][sty+1]!='*'&&d[stx][sty+1]==-1){d[stx][sty+1]=d[stx][sty]+1; qx.push(stx);qy.push(sty+1);} if(stx<n&&tu[stx+1][sty]!='*'&&d[stx+1][sty]==-1){d[stx+1][sty]=d[stx][sty]+1; qx.push(stx+1);qy.push(sty);} }
}
bool bfs2()
{for(i=1;i<=T;i++)xia[i]=yuan[i],D[i]=99999999;q.push(S);D[S]=1;while(!q.empty()){int st=q.front();q.pop();for(i=xia[st];i!=-1;i=hou[i]){if(v[i]==0)continue;int nd=zhong[i];if(D[nd]!=99999999)continue;D[nd]=D[st]+1;q.push(nd); } }
if(D[T]==99999999) return 0;
else return 1;
}
int dfs(int o,int limit)
{if(!limit||o==T)return limit;int i,f=0,flow=0,nd;for(i=xia[o];i!=-1;i=hou[i]){xia[o]=i;nd=zhong[i];if(D[nd]==D[o]+1&&(f=dfs(nd,min(limit,v[i])))){flow+=f;limit-=f;v[i]-=f;v[i^1]+=f;if(!limit)break; } } return flow;
}
void dinic()
{while(bfs2()){dfs(S,1000000); }
}
int jdz(int o)
{if(o<0)return -o;else return o;
}
int main()
{memset(yuan,-1,sizeof(yuan));scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%c",&tu[i][j]);while(tu[i][j]!='*'&&tu[i][j]!='.')scanf("%c",&tu[i][j]); }scanf("%d",&p);for(i=1;i<=p;i++){scanf("%d%d",&xx[i],&yy[i]);}for(i=1;i<=p;i++){scanf("%d",&v[i]); }
scanf("%d",&r);
for(i=1;i<=r;i++)
{scanf("%d%d%d%d",&t[i],&x[i],&y[i],&bh[i]);gs[bh[i]]++;
}
for(i=1;i<=p;i++)
{xs=xx[i];ys=yy[i];
bfs(); for(j=1;j<=r;j++){int jl=v[bh[j]]*t[j];if(d[x[j]][y[j]]<=jl&&d[x[j]][y[j]]!=-1){ky[i][bh[j]]++; } }
}S=p*2+1;T=p*2+2;for(i=1;i<=p;i++){jia(S,i,1);jia(p+i,T,1);for(j=1;j<=p;j++) {if(ky[i][j]==gs[j]) jia(i,p+j,1); } }dinic();for(i=1;i<=p;i++){for(j=xia[i];j!=-1;j=hou[j]){int nd=zhong[j];if(nd==S||v[j])continue;daan[nd-p]=i; } }for(i=1;i<=p;i++){printf("%d %d %d\n",i,xx[daan[i]],yy[daan[i]]); }
}
[SDOI2005]动物园 匹配相关推荐
- [总结]2019年9月 OI学习/刷题记录
从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...
- BZOJ3670 [Noi2014]动物园 【KMP计数】
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3143 Solved: 1690 [Submit][Stat ...
- spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?
作者:平凡希http://cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 如 ...
- bzoj 3670: [Noi2014]动物园
Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1407 Solved: 749 [Submit][Status][Discuss] Descrip ...
- 疯狂动物消消乐html5游戏在线玩,疯狂动物园消消乐游戏
疯狂动物园消消乐游戏是一款会让你清楚地知道,所有的问题的出现都是会有一定的操作的,也是会有一定的要求的益智趣味类休闲消除游戏,不要担心这些问题会有什么操作,那是不对的,因为对于你来说,没有什么是能够阻 ...
- 基于预训练模型 ERNIE 实现语义匹配
基于预训练模型 ERNIE 实现语义匹配 本案例介绍 NLP 最基本的任务类型之一 -- 文本语义匹配,并且基于 PaddleNLP 使用百度开源的预训练模型 ERNIE1.0 为基础训练效果优异的语 ...
- 动物园管理员-Zookeeper
原创于 [模棱博客] 首先认识ZooKeeper ZooKeeper-译名为"动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物 ...
- JAVA计算机毕业设计动物园管理系统Mybatis+系统+数据库+调试部署
JAVA计算机毕业设计动物园管理系统Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计动物园管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...
- 简易的动物园管理系统之Java8流式API的重构代码(使用 门面设计模式)
文章目录 前言 之前的文章 本次的源码 AnimalTypeEnum SexEnum Animal AnimalFactory BaseAnimal Bird Cat Dog Fish AddAnim ...
最新文章
- 计算机jsp外文文献,计算机 JSP web 外文翻译 外文文献 英文文献
- 8086之8253芯片仿真
- 洛谷 P1849 [USACO12MAR]拖拉机Tractor
- html登录后记住用户名,完成登录功能,用session记住用户名
- 关于团队项目的一些感想——刘宇翔
- 职称计算机word模拟题,2017年职称计算机考试Word2003模拟题及答案(1)
- python进阶20装饰器
- ANTS Memory Profiler - NET内存泄漏分析工具
- 手机 safari mac 调试
- 手机TF 卡 无法读取,提示需要格式化
- Unity-timeline(时间线)
- html边框如何制作三角形,如何用css3绘制有边框的三角形
- 锤子m1l 刷android7.0,锤子M1/M1L收到 Smartisan OS 3.7.0 更新推送
- 计算概论(一)计算起源、图灵机、计算原理
- win10商店打不开_win10自带的照片查看器打不开的修复方法
- 高质量作品集封面合集(含封面素材、字体包和作品集封面原始文档)
- 地图导航中的路径规划算法(综述)
- python爬虫 构建自己的代理IP池
- post 与get 区别,为什么现在的HTTP通信中大多数请求还是使用get?
- mAPI软件升级到v1.4.0(正式版)
热门文章
- php hibernate,Hibernate总结
- ajax与DOM的使用,AJAX和DOM的运行经验
- SpringMVC处理请求或响应数据
- LaTeX中巨算符下面输入两行内容的方法
- 素数的有关性质(二)欧拉函数的一些定理证明与计算
- 机器学习十大经典算法之朴素贝叶斯分类
- 计算机学院迎新活动总结,大学迎新活动总结
- eclipse安装Android模拟器genymotion及其插件
- vuejs对象更新渲染_vue 数组和对象渲染问题
- java etcd api_在java中如何使用etcd的v2 和v3 api获取配置,并且对配置的变化进行监控和监听...