这道题一开始我没想什么直接开始染, 但是是for循环一个节点一个节点染, 然后就WA 后了看了https://www.cnblogs.com/jerryRey/p/4702323.html 发现原来还需要证明一下染色一定可以, 同时染色的方式是dfs (1)证明 首先, 如果最大度数sum是偶数, 那么按照题目意思, k就为sum+1. 这个时候最坏情况下最大度数点与周围点的颜色都不一样, 需要sum+1种颜色, 也就是刚好是 k, 所以这种情况一定可以用k种颜色染完 其次, 如果最大度数sum…
题意:给你一个地图,求联通块的数量. 题解: for(所有还未标记的‘@’点) 边dfs边在vis数组标记id,直到不能继续dfs. 输出id及可: ac代码: #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<algorithm> #include<string> #include<vector> #include<list&…
用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #include<cstdio> #include<vector> #include<cstring> #include<queue> #include<algorithm> #define REP(i, a, b) for(int i = (a); i <…
很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配 紫书上压根没讲这个算法, 而是用最大流求的. 难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗? 很有可能-- 回归正题. 题目中只差一个数字的时候可以匹配, 然后求最少模板数. 那么肯定匹配的越多就越少, 也就是求最多匹配多少. 这个时候我就想到了二分图最大基数匹配. 那么很容易想到可以匹配的一组之间就连一条弧. 但问题是怎么分成两类??分类的目的是让同一类之间没有弧, 这样才是二分图. 后来发现因为匹配的一组只有一个数字不…
本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有包含关系的时候怎么选, 然后发现当两个区间只能放一个的时候时间更短而截 至时间更长的时候,显然更优.然后我就试着每个区间放的时候后后面的比较, 如果两个区间只能放一个, 而且 下个区间更优, 那么当前的就不选.然后排除掉这些区间之后, 能选的就选. 交上去WA.然后我发现中间的区间排除了,但是前面和后面的区间…
这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/wcr1996/article/details/43774331 发现是题意是错误的. 是从1到n的排列变成给的排列, 而不是反过来 其他人的博客都是逆向思维来写, 也就是我原来写误打误撞的那样, 只不过操作反过来, 以及最后 输出是反的.这种方法很值得学习 其实正向也不难, 无非是设置了一种新的优…
题目 \(dfs+\)证明. 对于题目描述,可以发现\(K\)其实就是大于等于原图中最大度数的最小奇数,因为如果原图度数最大为奇数,则最多颜色肯定为K,而如果原图最大度数为偶数,则\(K\)又是奇数,则最多颜色也肯定小于等于\(K\). 然后可以\(dfs\)染色,染色有两种方法,一种是枚举颜色,然后判断可行性并考虑回溯.这种搜索复杂度很大. 而另一种方法就是直接贪心搜索,使每个当前搜到的点取除去与它相连的颜色的最小值,然后并不需要判断可行性,因为每次都是将当前颜色尽可能的不相同. #defin…
题目链接  点击打开链接 这道题分为两个部分, 一用搜索枚举每种可能, 二计算表达式的值, 有挺多细节需要注意 特别注意我的代码中在计算表达式的值中用到了一个!(代码枚举中的!表示不加符号, 我现在说的是表达式中的!), 这个是 虚拟的, 是为了数字栈里面只有一个数字的时候不会被计算,因为计算至少要两个数个时候. 这个时候f函数返回0是不会执行50 行的while的.比如2100-100,这当执行到'-'时候不能用cal, 因为只有2100一个数字. 具体看代码. #include<cstdio…
书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最优的移动士兵的方式, 使得与敌方相邻的阵营中最少的士兵最多 因为只能在我方的阵营中移动士兵, 所以建模的时候不用加入地方阵营的点. 首先因为士兵只能移动一次, 所以把点拆成两个点, 入点和出点. 设阵营士兵的人数为k[i] 那么源点到入点连一条弧, 容量为k[i], 然后入点和出点再连 一条弧, 容…
一开始要符合题目条件, 那么肯定没有任何一个点是孤立的, 也就是说没有点的度数是1 所以我就想让度数是1的叶子节点相互连起来.然后WA 然后看这哥们的博客 https://blog.csdn.net/trote_w/article/details/79504280 原来连叶子的时候, 有三个叶子的时候, 中间的留到下一次连,左右连起来. 我之前是直接按照顺序连. 按照顺序那么边可能会封闭在一颗子树里面, 比如一颗子树有两个叶子 ,然后他们互相连接. 这个时候把 子树的根 和 子树的根的父亲连的边…