狼抓兔子(平面图转对偶图)

面对下面这样一个网格的地形:

道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下角(N,M)的窝中去,狼王开始伏击这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的狼的数量要最小。因为狼还要去找喜羊羊麻烦。

没什么好说的,放张图就知道了:

#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;const int maxn=3e6, INF=1e9;
int n, m, src, dst;
struct Edge{int to, nxt, v;
}e[maxn*2];
int fir[maxn], cnte;
void addedge(int x, int y, int v){Edge &ed=e[++cnte];ed.to=y; ed.nxt=fir[x]; ed.v=v; fir[x]=cnte;Edge &ed2=e[++cnte];ed2.to=x; ed2.nxt=fir[y]; ed2.v=v; fir[y]=cnte;
}int dis[maxn], num[maxn];
struct cmp{bool operator ()(int x, int y){ return dis[x]>dis[y]; }
};
priority_queue<int, vector<int>, cmp> q;
int dijkstra(){for (int i=1; i<=dst; ++i) dis[i]=INF;int u, v; q.push(src); num[src]=1;for (int i=0; i<=dst; ++i){while (num[q.top()]>1) --num[q.top()], q.pop();u=q.top(); q.pop(); --num[u];for (int j=fir[u]; ~j; j=e[j].nxt){v=e[j].to;if (dis[u]+e[j].v<dis[v]){dis[v]=dis[u]+e[j].v;++num[v]; q.push(v);}}}return dis[dst];
}int main(){memset(fir, -1, sizeof(fir));scanf("%d%d", &n, &m); int t; src=0; dst=n*m+1;for (int i=1; i<m; ++i){ scanf("%d", &t); addedge(src, i*2, t); }for (int i=1, cur=1; i<n-1; ++i)for (int j=1; j<m; ++j, cur+=2){scanf("%d", &t);addedge(cur, cur+2*m-1, t);}for (int i=1; i<m; ++i){ scanf("%d", &t); addedge(dst-2*(m-i), dst, t); }for (int i=1, cur=2; i<n; ++i){scanf("%d", &t); addedge(cur-1, dst, t);for (int j=1; j<m-1; ++j, cur+=2){scanf("%d", &t);addedge(cur, cur+1, t);}scanf("%d", &t); addedge(0, cur, t); cur+=2;}for (int i=1, cur=1; i<n; ++i)for (int j=1; j<m; ++j, cur+=2){scanf("%d", &t); addedge(cur, cur+1, t); }printf("%d\n", dijkstra());return 0;
}

转载于:https://www.cnblogs.com/MyNameIsPc/p/9147130.html

狼抓兔子(平面图转对偶图)相关推荐

  1. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

  2. BZOJ1001 狼抓兔子 终于过了!

    时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...

  3. P2030 - 【BJOI2006】狼抓兔子

    P2030 - [BJOI2006]狼抓兔子 Description 八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001  现 ...

  4. 【BZOJ1001】狼抓兔子

    [BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...

  5. 【bzoj1001】【狼抓兔子】

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 12719 Solved: 3017 [Submit][ ...

  6. bzoj1001/BJOI2006 狼抓兔子

    1001: [BeiJing2006]狼抓兔子(传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.com/view/8f1fde586 ...

  7. 【BZOJ1001】狼抓兔子题解

    BZOJ1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还 ...

  8. bzoj 1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   Memory Limit: 162 MB Submit: 15622   Solved: 3771 [ Sub ...

  9. [bzoj1001]狼抓兔子

    现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点 ...

最新文章

  1. Android学习笔记-Wifi网络操作
  2. latex 公式转图片
  3. web前后台数据交互
  4. java data是什么文件_如何用java实现 读取一个data类型文件 并显示出来(随便选择一种类型txt或者word)...
  5. Java中的使用了未经检查或不安全的操作
  6. Kafka的通讯协议
  7. PHP关闭$_ENV后获取服务器参数的办法
  8. 一文详解opencv摄像头数字识别
  9. 345取出值怎么算角度_资料分析怎么提分?这几个公式你必须会!
  10. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 09课
  11. Redis 面试一定要知道的 3 个 问题!
  12. 数学建模——蒙特卡罗模型
  13. 文件IO(IO编程)
  14. 整车行业 SAP APO 开发备忘(刘欣)
  15. Android SDCard中写入文件
  16. 工程力学(1)-公理以及简单的受力分析
  17. 密码学hash函数-SHA256-512
  18. Android查看手机位置,android-查找手机的位置
  19. Lumen超全功能知识点来了,ue5初学者们必看
  20. 百度搜索稳定性问题分析的故事(上)

热门文章

  1. 《Linux菜鸟入门》认识linux系统
  2. 右键菜单打开文件所在文件夹的插件EasyExplore
  3. ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云
  4. java 实现接口后重写方法报错
  5. 29、C++ Primer 4th 笔记,异常处理
  6. Rails全局处理Error
  7. 压缩SQL数据库日志-收缩SQL数据库日志-备份SQL数据库日志-删除SQL数据库日志
  8. Mysql 索引优化分析_如何优化MySQL的性能?从索引方面优化案例分析
  9. CAN总线简明易懂教程(一)
  10. 频谱细化(补零、zfft、czt)