<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[刘二狗的博客]]></title><description><![CDATA[时间并不会因为你的迷茫和迟疑而停留。]]></description><link>https://blog.youkuaiyun.com/Healer66</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Healer66]]></copyright><item><title><![CDATA[Gym - 102040F  - Path Intersection （树链剖分）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/99323634</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/99323634</guid><author>Healer66</author><pubDate>Mon, 12 Aug 2019 18:55:00 +0800</pubDate><description><![CDATA[类似 hdu3966


#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 10000+10;
struct Edge
{
    int to,next;
} edge[maxn*2];
int head[maxn],tot;
int top[maxn];
int fa[maxn];
int deep[max...]]></description><category></category></item><item><title><![CDATA[HDU - 5547 - Sudoku (dfs)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/98509314</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/98509314</guid><author>Healer66</author><pubDate>Mon, 05 Aug 2019 19:06:31 +0800</pubDate><description><![CDATA[思路:

纯暴力会超时，每次填的时候需要判断当前行列是否满足情况，最后判断2x2的是否满足即可

ps：一定不要忘了回溯


#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;
#include &lt;cstring&gt;
#include &lt;algorithm&gt;
#include &lt...]]></description><category></category></item><item><title><![CDATA[HDU - 5546  - Ancient Go （dfs）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/98507631</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/98507631</guid><author>Healer66</author><pubDate>Mon, 05 Aug 2019 18:44:24 +0800</pubDate><description><![CDATA[题意:

点代表空格，相同棋子上下左右相连为一个分量，当一个分量不与点相连的时候这个分量就是死的，题目先把o死的分量去除，再把x死的分量去除，这之后再下一个x问能不能使一个o分量dead，最后这个就是判断有没有o分量所连的点只有一个

思路:

搜索三次即可


#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cmat...]]></description><category></category></item><item><title><![CDATA[HDU - 6386 - Age of Moyu (BFS分层+DFS 或者 最短路+set)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/98072660</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/98072660</guid><author>Healer66</author><pubDate>Thu, 01 Aug 2019 16:57:52 +0800</pubDate><description><![CDATA[题意:

连续相同类型的边花费为1，走不同的边花费加一，求最少花费

BFS：维护当前最少花费，每次往外扩展一步即可

最短路:set记录到达改点的边的类型都有哪些(距离相同)，如果出现更小的则清空，否则若相同，加入集合。 在进行距离更新时判断一下set里有没有当前类型的边即可

BFS


#include &lt;bits/stdc++.h&gt;

using namespace std;
...]]></description><category></category></item><item><title><![CDATA[Gym - 101170F  - Free Weights (二分)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/97924839</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/97924839</guid><author>Healer66</author><pubDate>Wed, 31 Jul 2019 15:42:27 +0800</pubDate><description><![CDATA[思路:

二分重量，判断删除后大于重量的哑铃是否相等


#include &lt;bits/stdc++.h&gt;
using namespace std;
int n;
const int maxn = 1e6 +10;
set&lt;int&gt; se;
int a[maxn];
int b[maxn];
vector&lt;int&gt;v;
bool check(int id)
{
...]]></description><category></category></item><item><title><![CDATA[POJ - 1236  Network of Schools (tarjan)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/97623234</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/97623234</guid><author>Healer66</author><pubDate>Mon, 29 Jul 2019 09:25:46 +0800</pubDate><description><![CDATA[题意:

一个点能影响到之后的所有点，问最少给几个点施加影响能使所有的点都收到影响以及最少连几条线能使得给一个点施加影响就能使所有点都受到影响

思路:

第一个问就是求强连通分量的数量

第二问，我们需要求没有入度和没有出度的联通分量各有多少，取最大值即可。因为我们必须保证所有的联通分量间可达


#include &lt;iostream&gt;
#include &lt;algorithm&...]]></description><category></category></item><item><title><![CDATA[Gym - 101350G  - Snake Rana (容斥)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/97396536</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/97396536</guid><author>Healer66</author><pubDate>Fri, 26 Jul 2019 17:03:07 +0800</pubDate><description><![CDATA[思路:

学习了网上大部分思路，总结如下:

多加零行零列,这样相当于n+1行，m+1列，一共能形成的长方形数，就是从行中挑两条线，从列中挑两条线相交形成的一矩形

然后减去包含奇数个炸弹点的矩形区域，加上包含偶数个炸弹点的区域。区域用左下和右上点表示，然后行的两条线就是从最小行以下和最大行以上挑选了，列同理


#include &lt;bits/stdc++.h&gt;
using names...]]></description><category></category></item><item><title><![CDATA[Gym - 101350I  - Mirrored String II （马拉车）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/97394292</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/97394292</guid><author>Healer66</author><pubDate>Fri, 26 Jul 2019 16:12:32 +0800</pubDate><description><![CDATA[题意：

求最长回文子串，但每个字母也必须是回文的

思路：

马拉车，但奇数长度的回文串需要特判


#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 1100;
const int inf=  0x3f3f3f3f;
int n,m;
set&lt;char&gt; se;
char s[maxn];
ch...]]></description><category></category></item><item><title><![CDATA[Gym - 101350E  - Competitive Seagulls (博弈)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/97393916</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/97393916</guid><author>Healer66</author><pubDate>Fri, 26 Jul 2019 16:04:54 +0800</pubDate><description><![CDATA[思路:

第一次取，使得左右两端一样，这样，我们一直模仿b取就会获胜。

耻辱啊，记录下吧


#include &lt;bits/stdc++.h&gt;
using namespace std;
int main()
{
    int t;
    cin&gt;&gt;t;
    while(t--)
    {
        int n; 
        cin&gt;&gt;n;...]]></description><category></category></item><item><title><![CDATA[Gym - 100829C - The Fox and the Owl(模拟&& 思维)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89436445</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89436445</guid><author>Healer66</author><pubDate>Sun, 21 Apr 2019 18:02:19 +0800</pubDate><description><![CDATA[题意：

给你一个数n，求位数和比n的位数和大一的且与n最接近的的比n小的数。

思路：

见注释



#include &lt;bits/stdc++.h&gt;
using namespace std;
string s,ss;
const int maxn = 1e5+10;
const int inf =0x3f3f3f3f;
int a[maxn];
bool judge(int in...]]></description><category></category></item><item><title><![CDATA[HDU - 5438 - Ponds (拓扑排序&&并查集)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89435681</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89435681</guid><author>Healer66</author><pubDate>Sun, 21 Apr 2019 17:15:35 +0800</pubDate><description><![CDATA[题意：

题意：有n个池塘和m个管道；每个池塘的价值是v， 现在要删除池塘，删除的池塘必须是最多只连接一个管道，否则会爆炸；求最后相连的池塘是奇数个的价值总和是多少。

思路：

拓扑排序后求和


#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 1e4+ 7;
typedef long long ll;
c...]]></description><category></category></item><item><title><![CDATA[HDU - 6228  - Tree (dfs)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89406984</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89406984</guid><author>Healer66</author><pubDate>Fri, 19 Apr 2019 19:48:48 +0800</pubDate><description><![CDATA[思路：

若想某个点被访问，则这个点的左右两端都得有不小于k个点。

因此，dfs，得出某个点的一端点的数量，判断即可


#include&lt;bits/stdc++.h&gt;

using namespace std;
const int maxn =2e5+10;
int n,k,h[maxn],ans;
vector&lt;int&gt; g[maxn];
int dfs(int m)...]]></description><category></category></item><item><title><![CDATA[POJ - 1696 - Space Ant （极角排序）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89363844</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89363844</guid><author>Healer66</author><pubDate>Wed, 17 Apr 2019 20:18:21 +0800</pubDate><description><![CDATA[思路：

先找左下点，然后排序找其右下第一个点，重复即可


#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;algorithm&gt;
using namespace std;
const double eps = 1e-8;
int pos;
int sgn(double x)
{
    if(fabs(x) &lt...]]></description><category></category></item><item><title><![CDATA[HDU - 1811 - Rank of Tetris (并查集&&拓扑排序)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89362964</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89362964</guid><author>Healer66</author><pubDate>Wed, 17 Apr 2019 19:38:04 +0800</pubDate><description><![CDATA[思路：

先把‘=’的数合并成一个，然后拓扑排序，如果拓扑过程中可选择点的数量超过一个，则信息不完全。

如果有环，说明冲突，那么num就不会到0.


#include &lt;bits/stdc++.h&gt;

using namespace std;
const int maxn = 1e4 + 10;
int n,m,fa[maxn],X[maxn * 2],Y[maxn * 2];
i...]]></description><category></category></item><item><title><![CDATA[HDU - 1426  - Sudoku Killer (dfs)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89353357</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89353357</guid><author>Healer66</author><pubDate>Wed, 17 Apr 2019 12:05:23 +0800</pubDate><description><![CDATA[思路：

dfs即可，赋值前先判断是否可以


#include &lt;bits/stdc++.h&gt;
using namespace std;

struct point
{
    int x, y;
}p[81];
int num, flag, G[10][10];
int judge(int n, int k)
{
    int i, j, x, y;
    for(i = 0;...]]></description><category></category></item><item><title><![CDATA[HDU - 1142 - A Walk Through the Forest (最短路+dfs)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89340154</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89340154</guid><author>Healer66</author><pubDate>Tue, 16 Apr 2019 19:29:10 +0800</pubDate><description><![CDATA[题意：

终点到B和A有多少条路径，且终点到B的距离小于A


#include &lt;bits/stdc++.h&gt;

using namespace std;
const int maxn = 1e3 + 10;
const int inf = 0x3f3f3f3f;
int G[maxn][maxn];
int dis[maxn];
bool vis[maxn];
int p[maxn...]]></description><category></category></item><item><title><![CDATA[ZOJ - 4067  - Books （思维）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89193856</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89193856</guid><author>Healer66</author><pubDate>Wed, 10 Apr 2019 20:34:16 +0800</pubDate><description><![CDATA[题意：

能买则买，不买看下一个，给出一共卖了多少，问这个人最多可能有多少钱

思路：

注意价格为0不需要付钱，所以需要提前计算0的个数。然后买前几个书，加上后面最低价钱的书就是答案


#include &lt;cstdio&gt;
#include &lt;algorithm&gt;
using namespace std;
typedef long long ll;
const int m...]]></description><category></category></item><item><title><![CDATA[ZOJ - 4057  - XOR Clique （思维）]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89193149</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89193149</guid><author>Healer66</author><pubDate>Wed, 10 Apr 2019 20:10:34 +0800</pubDate><description><![CDATA[题意：

求一个最大团，使得其中任意两个数的异或都比这俩数要小。

思路:

只要二进制位数一样，异或的值都比这俩数要小；

二分查找减少时间复杂度。

队友代码：


#include &lt;bits/stdc++.h&gt;
#define _for(i,a,b) for(int i=a;i&lt;b;++i)
#define _rep(i,a,b) for(int i=a;i&lt;=b;...]]></description><category></category></item><item><title><![CDATA[ZOJ - 4056  - Press the Button (模拟)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89192626</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89192626</guid><author>Healer66</author><pubDate>Wed, 10 Apr 2019 19:51:08 +0800</pubDate><description><![CDATA[题意：

问有效press次数，有效是指灯亮的时候有效

思路：

模拟时间器


#include &lt;bits/stdc++.h&gt;
using namespace std;
typedef long long ll;
ll a,b,c,d,t, v;
ll shinetime_;
long long cnt;
int main()
{
    int T;
    cin&gt;&g...]]></description><category></category></item><item><title><![CDATA[ZOJ - 4049 - Halting Problem (模拟)]]></title><link>https://blog.youkuaiyun.com/Healer66/article/details/89191302</link><guid>https://blog.youkuaiyun.com/Healer66/article/details/89191302</guid><author>Healer66</author><pubDate>Wed, 10 Apr 2019 19:01:13 +0800</pubDate><description><![CDATA[题意：

按照题意模拟，如果能进行到n+1步，则yes，否则如果无限循环，则no；

思路：

记录一下每一步对应的状态，如果重复访问，则重复。

一定要用bool类型！！！


#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 1e4 + 3;
int t,n;
int v[maxn];
int k[maxn...]]></description><category></category></item></channel></rss>