P4001 [ICPC-Beijing 2006]狼抓兔子】的更多相关文章

题目地址:P4001 [ICPC-Beijing 2006]狼抓兔子 平面图 边与边只在顶点相交的图. 对偶图 对于一个平面图,都有其对应的对偶图. 平面图被划分出的每一个区域当作对偶图的一个点: 平面图中的每一条边两边的区域对应的点用边相连,特别地,若两边为同一区域则加一条回边(自环). 这样构成的图即为原平面图的对偶图. 定理 平面图最小割 \(=\) 对偶图最短路. #include <bits/stdc++.h> #define pii pair<int, int> #de…
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最小流量 分析: -- 我想,不用分析了吧,就差明晃晃地写着这是最小割了-- 那我把这道妙题拎出来干啥? 无向边反向边初始化为和正向的边边权相同的边! 代码如下: #include<cstdio> #include<iostream> #include<algorithm>…
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=3,M=4).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) 3:(x,y)<==>(x+1,y+1) 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上…
正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n\leq 1000$,显然就考虑平面图转对偶图呗 然后好像就没有什么细节了,,,? 对了,$bzoj$上的话要特判1,洛谷上没有这个数据就不用辣$QwQ$ $QwQ$ (在$bzoj$上$T$了,,,应该是常数的问题懒得改了$QAQ$ #include<bits/stdc++.h> using n…
正题 题目链接:https://www.luogu.com.cn/problem/P4001 题目大意 给出一个类似于 的网格图,求起点到终点的最小割. 解题思路 最小割直接跑网络流,然后发现\(dinic\)都过不了.(好像加点玄学优化就能过) 然后上点科技,平面图最小割转其补图(对偶图)的最短路 平面图:满足所有边不相交的情况下可以被画在平面上的一张图\(G(V,E)\) 对偶图:将一张平面图的各个区域变成一个点,然后平面图上分割两个区域\(a,b\)的边在对偶图上就是连接\(a,b\)的一…
题面 可以看出来是最小割,然后你就去求最大流了 这么大的范围就是让你用网络流卡的?咋想的啊=.=??? 建议还是老老实实用 平面图最小割等于其对偶图最短路 这个东西来做吧,虽然这个东西跑的也挺慢的,最后一个点跑了$2s$ 对偶图就是被边分割出来的每个区域当成一个点,然后两个区域有公共边就连边,起点和终点的问题就在源汇点中间连一条边然后就能分出来了 #include<queue> #include<cstdio> #include<cctype> #include<…
题目描述 题解: 裸的最小割. 但是最大流跑不过去怎么办? 转变一下,既然最大流是一条左下<->右上的通路,我们可以把图划分为若干区域, 最后找左下到右上的最短路就行了. 代码: #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ; template<typenam…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1001 [算法] 最小割 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 1010 const long long inf = 1e18; struct edge { int to; long long w; int nxt; } e[MAXN * MAXN * ]; int i,j,n,m,tot,S,…
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个点. 对偶图中的每一个点,和它在平面图中每一个相邻的图形间有边,边权为原来分开它们的边的边权. 于是平面图最小割就是对偶图最短路. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; const int maxn=2*100…
传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<map> #include<iostream> using names…