<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[diary_yang的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/diary_yang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; diary_yang]]></copyright><item><title><![CDATA[2016腾讯IEG实习面试]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/51869084</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/51869084</guid><author>diary_yang</author><pubDate>Sat, 09 Jul 2016 22:59:10 +0800</pubDate><description><![CDATA[四月初稀里糊涂过了笔试之后，收到了面试通知。
    由于之前只是很想做游戏，但并不确定自己想去什么岗位，于是瞎填了一个。。。一面开始，面试官看了我的简历说：
    “你好像很喜欢做游戏啊。。。”
    “係啊。。。”
    “那我把你推荐给做游戏的同事把”
    “吼啊。。。”
    。。。
    于是一面面了两分钟便把我换给了另外一个面试官，这次应该才算是正式的一面：]]></description><category></category></item><item><title><![CDATA[2016/05/06]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/51331100</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/51331100</guid><author>diary_yang</author><pubDate>Fri, 06 May 2016 14:52:24 +0800</pubDate><description><![CDATA[/*
   	vector:动态数组，头文件 #include 
	定义：vector vec_name;
	*/

	//定义整形vector
	vector a;	

	//向容器末尾动态添加元素
	a.push_back(1);	
	a.push_back(2);
	
	//返回元素个数
	int n = a.size();	

	//遍历容器
	for(int i=0; i<n; i++)]]></description><category></category></item><item><title><![CDATA[2016/05/06]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/51331505</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/51331505</guid><author>diary_yang</author><pubDate>Fri, 06 May 2016 14:43:22 +0800</pubDate><description><![CDATA[vector:动态数组，头文件 #include 
	定义：vector vec_name;

	//定义整形vector
	vector a;	

	//向容器末尾动态添加元素
	a.push_back(1);	
	a.push_back(2);
	
	//返回元素个数
	int n = a.size();	

	//遍历容器
	for(int i=0; i<n; i++)
	{
		cout<]]></description><category></category></item><item><title><![CDATA[Codeforces 593D - Happy Tree Party(树链剖分）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/49683185</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/49683185</guid><author>diary_yang</author><pubDate>Fri, 06 Nov 2015 15:00:52 +0800</pubDate><description><![CDATA[#include 
#include 
#include 
#include 
#include 

#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;

const int maxn = 200020;
const long long INF = 1e18;
int n, m, total, edg]]></description><category></category></item><item><title><![CDATA[URAL 1721 Two Sides of the Same Coin（二分匹配）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16972683</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16972683</guid><author>diary_yang</author><pubDate>Tue, 26 Nov 2013 21:33:41 +0800</pubDate><description><![CDATA[只看最后两段就行了。。
题意就是，有些会statement，有些人会testdata，有些人两种都会。然后每个人有一个rank值，rank值相差2的两个人可以合作，求最大匹配。

注意rank值相差2的人可以相互合作，也就是说，我们要把图分成二分图，使得能跟左边任意一个节点配对的点一定在右边。这样只需将rank % 4 = 2的人放在右边节点就行了。
#include
#include
#]]></description><category></category></item><item><title><![CDATA[URAL 1715 Another Ball Killer(大模拟)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16972007</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16972007</guid><author>diary_yang</author><pubDate>Tue, 26 Nov 2013 21:07:10 +0800</pubDate><description><![CDATA[在搞这种SB模拟题之前。。。一定要先把sample算明白。。。不然会很悲剧的。。。
具体思路没什么好说的了吧，每次都找当前最大的连通块，当前没有连通块或者当前最大连通块小于2的时候（坑）终止就行了。注意题目中algorithm中的第三行的while...不是if...
get_score(key, type)函数用于找当前主颜色为key的时候的最大连通块，type为0的时候找非主色调的最大块，]]></description><category></category></item><item><title><![CDATA[zoj 3732 Graph Reconstruction(构造)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16944541</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16944541</guid><author>diary_yang</author><pubDate>Mon, 25 Nov 2013 14:55:26 +0800</pubDate><description><![CDATA[预备知识：Havel-Hakimi定理
先跑一遍Havel_Hakimi算法判断是否有解。对于判断多解的情况，再跑一遍Havel_Hakimi，如果sort(p+i, p+n)排序后，从i分别向i+1,
 i+2...i+p[i].d连边时，如果i+p[i].d跟i+p[i].d+1的剩余度数相同，那么交换这两个点在剩下的图中的位置，就能得到两个不同的图了。
坑：当边数为零的时候，也要输出两]]></description><category></category></item><item><title><![CDATA[hdu 4784 Dinner Coming Soon（优先队列+spfa)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16808771</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16808771</guid><author>diary_yang</author><pubDate>Mon, 18 Nov 2013 19:19:09 +0800</pubDate><description><![CDATA[看完题目的开头，大概是个二维spfa，产生了此题可搞的幻觉。。。
接着就看到了这句“But the matter is not so simple.”，次奥，看来是个三维的呢。。。
接着就看到了这句“However, the problem is more complicated than imagine. ”，尼玛四维。。。好吧，四维spfa本质还是spfa吧。。
于是就出现了在hdu各种]]></description><category></category></item><item><title><![CDATA[hdu 4781 Assignment For Princess(构造法)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16368039</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16368039</guid><author>diary_yang</author><pubDate>Sun, 17 Nov 2013 10:18:49 +0800</pubDate><description><![CDATA[构造一个n个点，m条有向边的图，需要满足两个要求：
1.任意一对点对之间最多有一条有向边，且没有自环。
2.保证图联通，m条边的边权严格属于[1, m]且互不相同，从任意点出发，经过任意路径后回到起始点，经过的边权总和是3的倍数。
其中第二个要求似乎听上去很玄乎，其实可以一步一步的来：要同时满足1.2的要求，而且输入数据 m >= n + 3，那么也就是说，我们总是能轻松的先构造一个n个点n]]></description><category></category></item><item><title><![CDATA[Codeforces 362E Petya and Pipes （费用流）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16340875</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16340875</guid><author>diary_yang</author><pubDate>Fri, 15 Nov 2013 15:36:39 +0800</pubDate><description><![CDATA[n个点的网络，可以增加某些弧的容量，最大增加量为K，求增加后的最大流。
要求增大K容量后的最大流，那如果把增加的流量加上费用呢？那题目也就是说，当费用为K的时候，最大流是多少。。。。
把每条边拆成两条边跟，然后求s-t费用流，在费用等于K的时候终止费用流就行了。
#include
#include
#include
#include
#include
#define REP(i, n) fo]]></description><category></category></item><item><title><![CDATA[UVALive 2197	 Paint the Roads（费用流）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16114109</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16114109</guid><author>diary_yang</author><pubDate>Thu, 14 Nov 2013 11:11:30 +0800</pubDate><description><![CDATA[n个点m条边的带权有向图，现在要将某些边涂上颜色，使得每个点恰好在k个有颜色的环上。
每个点都在k各环中，说明每个点的 入度=出度=k。 用费用流搞，增加源汇点s ，t，将每个点拆成两个点，u跟u+n，一个代表出度，一个代表入度。从s向每个u连的边，从每个u+n向t连的边，分别代表入度跟出度的上限。 然后对于原图中的有向边， 从u向v+n连一条的边。这样求s->t的最小费用最大流。如果能漫流，答]]></description><category></category></item><item><title><![CDATA[UVA 11613  Acme Corporation（不固定流量的最小费用流）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16105599</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16105599</guid><author>diary_yang</author><pubDate>Wed, 13 Nov 2013 23:02:34 +0800</pubDate><description><![CDATA[题意好长。。。。变量好多。。。。
增加源点跟汇点。然后将每个月份看成一个点，然后拆成两个点u 跟 u+n。 
从s向每个u连一条的弧，表示最多生产量及价值。
从每个u+n向t连一条的弧，表示最多销量及价值。
对于存放的情况 for(int j=0; j的弧，表示存放所要花费的价值。
这题并不需要满足销量最大，也就是不固定流量的最小费用流，也就是说当s-t增广长度大于0的时候停止增广就行了]]></description><category></category></item><item><title><![CDATA[UVA 12655 Trucks(MST + LCA)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/16011083</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/16011083</guid><author>diary_yang</author><pubDate>Wed, 13 Nov 2013 20:52:19 +0800</pubDate><description><![CDATA[n个点m条边的带权无向图，S个询问，每次询问L->H的所有路径中，最小边最大的那条路径的最小边。
只要能发现，最优路径必然是kruskal求得的最大生成树上就一切都好办了。求出MST，然后在线LCA搞就行了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#de]]></description><category></category></item><item><title><![CDATA[hdu 4494 Teamwork(费用流)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/15505089</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/15505089</guid><author>diary_yang</author><pubDate>Tue, 12 Nov 2013 17:04:56 +0800</pubDate><description><![CDATA[最开始我是想的，把每个点拆成m个点，然后用一次费用流搞，对于那些可以重复利用的工人，添加一些cost为-1的弧。很逼真把，Why wa。。。
其实每个兵种是相互独立的，那么就可以对于每个兵种，分别搞一次费用流，最后累加ans。这样代码就好撸很多了呢。。。
费用流建图：显然每个点要拆成两个点，一个入（从s向其连的弧，简称x点），一个出（从该点向t连的弧，简称y点）。那么对于i，j两个点，如果en]]></description><category></category></item><item><title><![CDATA[SGU 548 Dragons and Princesses（贪心）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/15488817</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/15488817</guid><author>diary_yang</author><pubDate>Mon, 11 Nov 2013 22:50:32 +0800</pubDate><description><![CDATA[坑爹：
误以为王子可以marry中间任意一个princess，觉得不可搞，然后问了Lee，觉得优先队列也不好搞。。。
反思：
问了wintowanti，发现看错题了。。。其实只能marry最后一个princess。。。这样的话，用优先队列贪心就行了，每碰到一个di，将gi加入队列，每碰到一个pi，强制维护队列size 

#include
#include
#include
#inclu]]></description><category></category></item><item><title><![CDATA[UVA 12664 Interesting Calculator（spfa）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/14456013</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/14456013</guid><author>diary_yang</author><pubDate>Thu, 07 Nov 2013 18:57:01 +0800</pubDate><description><![CDATA[要你将x变换成y，一共有3×9中变换方法，每种变换有其对应的花费，然后求x-->y的最小花费，当最小花费不唯一时，求最小变换次数的解。
类似于双调路径的题，用spfa进行状态转移就行了。不过类似于 ×1， +0这种变换是没有意义的，不用加入队列中了。

#include
#include
#include
#include
#include
#include
#define REP(i, n]]></description><category></category></item><item><title><![CDATA[UVA 12661 Funny Car Racing(最短路)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/14455837</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/14455837</guid><author>diary_yang</author><pubDate>Thu, 07 Nov 2013 18:39:35 +0800</pubDate><description><![CDATA[n个点m条边的有向图，求s->t 的最短路。其中每条边不仅有一个边权，还有对应的一个a, b值。从你出发开始，该边将开放a的时间，然后关闭b的时间，然后开。。关。。。
几乎就是裸的最短路了，就是松弛的时候有两种松弛方法，一种是走到点u的时候，能直接走到v；另一种是时间不够，需要等“一段”时间，然后再走到v。

#include
#include
#include
#include
#incl]]></description><category></category></item><item><title><![CDATA[ZOJ 2318	 Get Out!（计算几何+spfa好题！）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/13880547</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/13880547</guid><author>diary_yang</author><pubDate>Thu, 31 Oct 2013 21:29:00 +0800</pubDate><description><![CDATA[你是一个圆，然后平面还有n个圆，问你能否通过移动自己，突出重围！再抽象一点，就是判断一个圆，是否在其他若干个彼此相连的圆的“大圈圈”内。。。
这里不得不强烈推荐watashi大神的神思路。。。神奇地将此题转化成图论模型！
个人的理解是，如果某两个圆相交或相切，那么他们组成的封闭区间可以用连接其两圆心的线段表示，这样能得到若干线段，这样就成了，若干线段中，是否能组成一个多边形，使得起始圆心在多边]]></description><category></category></item><item><title><![CDATA[URAL 1752 Tree 2(树的直径+RMQ)]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/13505629</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/13505629</guid><author>diary_yang</author><pubDate>Tue, 29 Oct 2013 12:16:03 +0800</pubDate><description><![CDATA[给出n个点的一棵树，边权都是1.然后q个询问，每次询问距离vi节点di的节点是什么，输出任意一个就行。
最开始yy到了找出树的直径，每个点能走的最长路的终点必然是直径的某个端点。然后把直径上的点存起来，然后对于询问vi不是直径上的点的时候dfs搞，妥妥儿的TLE了。。。
后面gxb搞出来了，用二维fa数组记录每个点到直径两个断点的路径。由于边权都是1，所以查询的时候可以用RMQ。。。学习了。。]]></description><category></category></item><item><title><![CDATA[hdu 3681 Prison Break（dp || dfs）]]></title><link>https://blog.youkuaiyun.com/diary_yang/article/details/12946699</link><guid>https://blog.youkuaiyun.com/diary_yang/article/details/12946699</guid><author>diary_yang</author><pubDate>Tue, 22 Oct 2013 13:54:32 +0800</pubDate><description><![CDATA[15Y。。。不过离当时的 hdu4766 21Y还有一段距离。。。
刚开始拿到这题就bfs TLE了一发。。。然后发现图中那些空地是可有可无的，于是可以把图中所有F G Y抽象出来建图，然后bfs。这个思路基本正解了吧？
于是就wa了一整晚。。。拉着ljy yy了一晚上，总觉得bfs是可以转移所有状态的。。。但是就是wa到死。。。
然后就发现了网上的人都是用dp来完成状态转移的。。为什么bf]]></description><category></category></item></channel></rss>