<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AndRing的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/AndRing</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; AndRing]]></copyright><item><title><![CDATA[【最小点覆盖（树形dp）】PKU-3659-Cell Phone Network]]></title><link>https://blog.csdn.net/AndRing/article/details/7471912</link><guid>https://blog.csdn.net/AndRing/article/details/7471912</guid><author>AndRing</author><pubDate>Wed, 18 Apr 2012 02:17:55 +0800</pubDate><description><![CDATA[题意：一棵树，,删掉一个节点,,可以消灭自己和与其相邻的节点,,,问最少删掉几个节点可以消灭所有的节点?
思路：树形dp，分三个状态，首先dp[i][j]表示以这点为跟的子树的后代都被消灭了，而dp[i][0]不删除且不被其相邻的点消灭，dp[i][1]表示这点不删除但被其相邻的点消灭，dp[i][2]表示这点删除，然后就是不同状态之间的转移了，具体看代码。
题目

#include
#i]]></description><category></category></item><item><title><![CDATA[【容斥原理】HDU-1796-How many integers can you find]]></title><link>https://blog.csdn.net/AndRing/article/details/7471911</link><guid>https://blog.csdn.net/AndRing/article/details/7471911</guid><author>AndRing</author><pubDate>Wed, 18 Apr 2012 02:05:34 +0800</pubDate><description><![CDATA[题意：问1-n范围内（小于n）的数有多少个能够整除一个集合{a，b，……}里任意一个数。
思路：容斥原理的模板题，直接上模板了。
题目

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define LL long long
int]]></description><category></category></item><item><title><![CDATA[【二维单调队列】FZU- Problem 2080 最大差值]]></title><link>https://blog.csdn.net/AndRing/article/details/7471907</link><guid>https://blog.csdn.net/AndRing/article/details/7471907</guid><author>AndRing</author><pubDate>Wed, 18 Apr 2012 01:56:55 +0800</pubDate><description><![CDATA[题意：给出一个n*m的矩阵，要求求出它所有r*c子矩阵里面的元素的最大值减最小值的差的最大值。
思路：二维的单调队列维护，时间复杂度为O（n^2）。
题目

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 1005]]></description><category></category></item><item><title><![CDATA[【数论（扩展的欧几里德）】ZOJ-3593-One Person Game]]></title><link>https://blog.csdn.net/AndRing/article/details/7448291</link><guid>https://blog.csdn.net/AndRing/article/details/7448291</guid><author>AndRing</author><pubDate>Wed, 11 Apr 2012 09:56:04 +0800</pubDate><description><![CDATA[一道变形的数论题，用到了扩展的欧几里德，具体看代码，另附上某大牛的解析：点击打开链接
题目

#include
#include
#include
using namespace std;
#define LL long long
struct euclid
{
    LL x,y,d;
};
LL labs(LL x)
{
    if(x<0)return -x;
    return]]></description><category></category></item><item><title><![CDATA[【dp+数论】PKU-3420-Quad Tiling]]></title><link>https://blog.csdn.net/AndRing/article/details/7441046</link><guid>https://blog.csdn.net/AndRing/article/details/7441046</guid><author>AndRing</author><pubDate>Mon, 09 Apr 2012 16:06:28 +0800</pubDate><description><![CDATA[题目要求用2x1的小长方形去填满一个4xN的大长方形，问有多少种填法……如果数据不大，那完全就是一道很裸的状态压缩dp，不过这题数据大得惊人，所以就想到了矩阵的快速幂相乘，不过找相邻之间的关系那里还是挺麻烦的，这里就贴上以为牛人关于用一个dfs来找关系的解析点击打开链接。
题目

#include
#include
#include
#include
using namespace std;]]></description><category></category></item><item><title><![CDATA[【博弈+数论】ZOJ-3591-Nim]]></title><link>https://blog.csdn.net/AndRing/article/details/7440933</link><guid>https://blog.csdn.net/AndRing/article/details/7440933</guid><author>AndRing</author><pubDate>Mon, 09 Apr 2012 14:52:02 +0800</pubDate><description><![CDATA[在比赛时一直弄不出这道题，虽知是博弈要用到异或运算，但在找连续的一串数时没什么好的想法，于是就悲剧了……赛后，在广大last大牛的指点下终于把它给过了，总的来说还是太水了……
思路：先设sum=（n+1）*n/2，从左到右求出1到i的nim（即1-i异或得到的数），然后把nim[i]从小到大排序，接下来就找到每一段相同的nim数的长度len，用sum-=len*（len-1)/2，当，nim[i]]></description><category></category></item><item><title><![CDATA[【数论】HDU-4196-Remoteland]]></title><link>https://blog.csdn.net/AndRing/article/details/7426899</link><guid>https://blog.csdn.net/AndRing/article/details/7426899</guid><author>AndRing</author><pubDate>Wed, 04 Apr 2012 23:50:42 +0800</pubDate><description><![CDATA[题意：取x个不大于n的数相乘出一个最大的完全平方数！
这里点击打开链接有某大牛的题解，我就不再累赘了。
题目

#include
#include
#include
using namespace std;
#define LL long long
#define N 10000000
#define mod 1000000007
bool flag[N+5];
int cnt,prime]]></description><category></category></item><item><title><![CDATA[【Floyd求无向图的最小环】PKU-1734-Sightseeing trip]]></title><link>https://blog.csdn.net/AndRing/article/details/7420192</link><guid>https://blog.csdn.net/AndRing/article/details/7420192</guid><author>AndRing</author><pubDate>Sun, 01 Apr 2012 18:59:41 +0800</pubDate><description><![CDATA[Floyd算法就是通过n次枚举中间点k来使i到j的距离松弛为最短，而本题就是在枚举k的时候找环，具体思路见代码！
题目

#include
#include
#include
using namespace std;
#define inf 999999
#define N 105
int n,len,ans,map[N][N],dis[N][N],post[N][N],path[N];
v]]></description><category></category></item><item><title><![CDATA[【dp】HUST-1351-Group]]></title><link>https://blog.csdn.net/AndRing/article/details/7417842</link><guid>https://blog.csdn.net/AndRing/article/details/7417842</guid><author>AndRing</author><pubDate>Sun, 01 Apr 2012 09:21:36 +0800</pubDate><description><![CDATA[很好的一道dp，它的状态转移真的是太巧秒了！
题意：给出一段数列，要求你将这段数列分割成最多k段且每段的个数不能少于l的数列，然后求一个和，它是由一段中所有数字的总和乘以这一段的段数，即这一段是第几段，然后把所有这样的和加起来得到的，问这个和最小是多少！
思路：先用sum[i]数组表示1到i这段数列的总和，数组dp[i][j]，表示的是将1到j这段数组分割成i段的最小值。所以状态转移为：
t]]></description><category></category></item><item><title><![CDATA[【Floyd求最短路+快速幂】PKU-3613-Cow Relays]]></title><link>https://blog.csdn.net/AndRing/article/details/7417630</link><guid>https://blog.csdn.net/AndRing/article/details/7417630</guid><author>AndRing</author><pubDate>Sun, 01 Apr 2012 00:15:26 +0800</pubDate><description><![CDATA[这题很好的综合了图论和数论的知识来解题，这种转化综合的思维我要好好地加强训练才行……其实这里明白到一点就可以很好地知道它们之间是怎么转化的，当map[i][j]表示i到j的最短路径，map[j][k]表示j到k的最短路径，且是经过n条路时，那么i到k的最短距离且经过2*n条路就一定是map[i][j]+map[j][k]了！
题目


#include
#include
#include]]></description><category></category></item><item><title><![CDATA[【矩阵快速幂相乘求Fibonacci 数列】PKU-3070-Fibonacci]]></title><link>https://blog.csdn.net/AndRing/article/details/7417604</link><guid>https://blog.csdn.net/AndRing/article/details/7417604</guid><author>AndRing</author><pubDate>Sat, 31 Mar 2012 23:56:55 +0800</pubDate><description><![CDATA[赤裸裸的模板题，具体思路就看代码吧！
题目

#include
#include
#include
using namespace std;
#define mod 10000
struct matrix
{
    __int64 a[2][2];
    void init()
    {
        for(int i=0;i<2;i++)
        {]]></description><category></category></item><item><title><![CDATA[【tarjan求双连通分量】PKU-3177&3352]]></title><link>https://blog.csdn.net/AndRing/article/details/7413820</link><guid>https://blog.csdn.net/AndRing/article/details/7413820</guid><author>AndRing</author><pubDate>Sat, 31 Mar 2012 02:13:18 +0800</pubDate><description><![CDATA[PKU上几乎一模一样的两道题，都是用tarjan来求双连通分量，唯一不同的就是3177会有重边的情况，而3352不会有，所以在加了判断重边之后的代码在两题提交都能过。
题目：
3177

3323

大神题解：点击打开链接

#include
#include
#include
#include
using namespace std;
#define N 5005
vector]]></description><category></category></item><item><title><![CDATA[【tarjan求割边】PKU-3694-Network]]></title><link>https://blog.csdn.net/AndRing/article/details/7413054</link><guid>https://blog.csdn.net/AndRing/article/details/7413054</guid><author>AndRing</author><pubDate>Sat, 31 Mar 2012 00:27:05 +0800</pubDate><description><![CDATA[先给出一个图，然后一次增加一些边，问在每条边增加后桥的数目是多少……因为是刚刚接触有关割的知识不久，所以都是模范人家的代码的，而且网上都是最朴素的代码，加上自己的水，所以时限5000ms的题跑出了3000+ms，真是悲剧啊！
题目

#include
#include
#include
#include
using namespace std;
#define N 100005
vector]]></description><category></category></item><item><title><![CDATA[【tarjan算法求割点】PKU-1523-SPF]]></title><link>https://blog.csdn.net/AndRing/article/details/7410965</link><guid>https://blog.csdn.net/AndRing/article/details/7410965</guid><author>AndRing</author><pubDate>Fri, 30 Mar 2012 13:23:10 +0800</pubDate><description><![CDATA[其实题目的数据不够规范，因为它的点可能不连续，而且数据里面一定有根节点1，这个在题目里体现不了！
题目
#include
#include
#include
#include
#include
using namespace std;
#define N 1005
vector vec[N];
int step,low[N],dfn[N],blg[N];
void add(int x,int]]></description><category></category></item><item><title><![CDATA[【综合图论】PKU-2942-Knights of the Round Table]]></title><link>https://blog.csdn.net/AndRing/article/details/7408605</link><guid>https://blog.csdn.net/AndRing/article/details/7408605</guid><author>AndRing</author><pubDate>Thu, 29 Mar 2012 19:58:03 +0800</pubDate><description><![CDATA[综合性很强的一道图论题，用到了补图，双连通分量，二分图等几个知识点，这里有某位大牛的神解题报告点击打开链接。
题目

#include
#include
#include
#include
#include
using namespace std;
#define N 1005
vector vec[N],lin[N];
stack sta;
int n,step,cnt,ans,low[N]]></description><category></category></item><item><title><![CDATA[【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons]]></title><link>https://blog.csdn.net/AndRing/article/details/7404647</link><guid>https://blog.csdn.net/AndRing/article/details/7404647</guid><author>AndRing</author><pubDate>Wed, 28 Mar 2012 21:14:53 +0800</pubDate><description><![CDATA[其实是很裸的一道几何题，题目要求的就是判断一个小的多边形是否完全且严格（两个多边形不能有交点）包含在另一个凸多边形里面。而解决的方法有很多，我这里用到的就是判断一个点是否完全且严格包含在一个多边形内，判断的时候用到了二分和叉积。
题目

#include
#include
#include
using namespace std;
#define N 100005
struct node
{]]></description><category></category></item><item><title><![CDATA[【树形dp】PKU-3345-Bribing FIPA]]></title><link>https://blog.csdn.net/AndRing/article/details/7396602</link><guid>https://blog.csdn.net/AndRing/article/details/7396602</guid><author>AndRing</author><pubDate>Mon, 26 Mar 2012 20:54:31 +0800</pubDate><description><![CDATA[dp[i][j]表示在以i为根的树选j个国家的最少费用，具体思维看代码……
题目

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define FRE freopen("a.txt","r",stdin);
#define inf 999999999]]></description><category></category></item><item><title><![CDATA[【树形dp】PKU-3107-Godfather]]></title><link>https://blog.csdn.net/AndRing/article/details/7387261</link><guid>https://blog.csdn.net/AndRing/article/details/7387261</guid><author>AndRing</author><pubDate>Fri, 23 Mar 2012 14:43:32 +0800</pubDate><description><![CDATA[题目要求找到这样的一个点，当删除这个点后使得形成的深林的最大的子树的节点最小。而且这些点可能有多个，请一一输出。其实这道题就是1655的翻版，不过在这道题中不能用stl中的vector，因为会超时，所以要用邻接表来存储。
题目

#include
#include
#include
#include
#include
#include
#include
#include
using name]]></description><category></category></item><item><title><![CDATA[【树形dp】PKU-2486-Apple Tree]]></title><link>https://blog.csdn.net/AndRing/article/details/7385540</link><guid>https://blog.csdn.net/AndRing/article/details/7385540</guid><author>AndRing</author><pubDate>Fri, 23 Mar 2012 01:00:09 +0800</pubDate><description><![CDATA[在原来很裸的树形dp上加了些限制条件，不过知道状态转移还是很好做的，但状态转移不好想啊，都是看了人家的结题报告后才知道的！
题目

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define FRE freopen("a.txt","r",stdin)]]></description><category></category></item><item><title><![CDATA[【Havel-Hakimi定理】PKU-1659-Frogs' Neighborhood]]></title><link>https://blog.csdn.net/AndRing/article/details/7381844</link><guid>https://blog.csdn.net/AndRing/article/details/7381844</guid><author>AndRing</author><pubDate>Thu, 22 Mar 2012 09:36:59 +0800</pubDate><description><![CDATA[1，Havel-Hakimi定理主要用来判定一个给定的序列是否是可图的。
2，首先介绍一下度序列：若把图 G 所有顶点的度数排成一个序列 S，则称 S 为图 G 的度序列。
3，一个非负整数组成的有限序列如果是某个无向图的序列，则称该序列是可图的。
4，判定过程：（1）对当前数列排序，使其呈递减，（2）从S【2】开始对其后S【1】个数字-1，（3）一直循环直到当前序列出现负数（即不是可图的情]]></description><category></category></item></channel></rss>