二分图题目 当时看到网上有人的博客写着最小边覆盖,也有人写最小路径覆盖,我就有点方了,斌哥(kuangbin)的博客上只给了代码,没有解释,但是现在我还是明白了,这是个最小路径覆盖(因为我现在还不知道啥叫最小边覆盖). 有一篇博客如下写道:最小路径覆盖只对有向无环图而言,且并不要求原图是二分图,给所有点一个分身,让他们分别处于两个集合就可以,求出的最小路径覆盖 = n - 最大匹配值. 证明:假设最大匹配值是0,那原先一共有n个路径,每次多一个匹配,这样的路径就减少1,证明完毕. 那么回到这个题…
题目链接 上下界费用流: /* 每个点i恰好(最少+最多)经过一次->拆点(最多)+限制流量下界(i,i',[1,1],0)(最少) 然后无源汇可行流 不需要源汇. 注: SS只会连i',求SS->TT的最大流 该走的i->i'是不会不走的 */ #include<queue> #include<cstdio> #include<cctype> #include<cstring> #include<algorithm> #def…
Delivering Goods UVALive - 7986(最短路+最小路径覆盖) 题意: 给一张n个点m条边的有向带权图,给出C个关键点,问沿着最短路径走,从0最少需要出发多少次才能能覆盖这些关键点 \(1 <= n <= 1000\) \(1 <= m <= 10^5\) \(1 <= w <= 10^9\) \(1 <= C <= 300\) 题解: 对所有的关键点建一个新图,对于任意两个关键点 若满足在原图中的最短路\(dis(0,u)+dis(…
题目: 题目描述 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2 ,3,… 的球.(1)每次只能在某根柱子的最上面放球.(2)在同一根柱子中,任何 2 个相邻球的编号之和为完全平方数.试设计一个算法,计算出在 n 根柱子上最多能放多少个球.例如,在 4 根柱子上最多放 11 个球.对于给定的 n,计算在 n 根柱子上最多能放多少个球. 输入格式 输入文件第 1 行有 1 个正整数 n(1<n<60),表示柱子数. 输出格式 输出 n 根柱子上最多能放的球数. 样例数…
1. 数组去重 题目描述 /** * 有序数组去重 * 输出最终的数字个数 * 输入:1,2,2 * 输出:2 * @author Turing * */ 代码 import java.util.*; public class E { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] str = sc.nextLine().split(","); int len…
题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小. 题目解析: 动态规划,用dp[i][j]表示到i,j的最小路径和. 动态方程: dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j] 注意这里的第一行,和…
Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [   [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小. 找从左上角0,0到右下角的最短路径. DP:我们每个点(x,y)都可以表示为dp[x][y] = max( grid…
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=54859604 向大(hei)佬(e)势力学(di)习(tou) 二分图其实早就学了,可是无赖自己当初没好好听讲,变种就不说了,连匈牙利算法都不会.这次给了我一个好好复习改过自新的机会,既把匈牙利搞熟了,也算是理解了一些变种. 最小路径覆盖: 题意 用最少的出租车送完所有的乘客 将时间上可以接上的乘客连边 在一个图中,希望用最少的路径将所有点走遍,为什么…
解题思路 有向图最小路径点覆盖问题,有这样的结论就是有向图最小路径点覆盖等于n-拆点二分图中最大匹配.具体怎么证明不太知道..输出方案时找到所有左部未匹配的点一直走$match​$就行了. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; ; ; inline int rd(){…
题意:最小路径覆盖 题解:对于一个有向图,最小点覆盖 = 顶点数 - 最大匹配 这里的最大匹配指的是将原图中每一个点拆成入点.出点, 每条边连接起点的出点和终点的入点 源点S连接每个点的出点,汇点T连接每个点的入点,这样建出来的二分图的最大匹配 然后输出路径被坑了很久 因为自己拆点的标号问题吧 我的拆点方式入点是偶数 出点是奇数 然后特判哪里就要写清楚 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3…