摘要:hdu3916Sequence Decomposition贪心解:(引)比如一个序列2 3 4 3 3 1如何拆成门函数分量使得长度尽量平均呢? 直观的想法是在消的过程中使序列尽量平均。首先想到是左边第一个肯定要拆成2个门函数且应使其尽可能长,但也不是越长越好。如果a[i] <= a[i+1] 那么消掉a[i]的时候,a[i+1]消掉肯定没坏处,因为如果不消,不仅可能使答案变小,而且序列也会变的更加不平均如果a[i] > a[i+1] 则本着使序列越来越平均的思想,消掉a[i]的时候自然是不要消掉a[i+1]了。上述样例采用该贪心方法的过程是2 3 4 3 3 1 消(1,3)1
阅读全文
摘要:贪心:枚举时间用范围最大的打高度最小的先按时间后按高度从低到高排列View Code #include<iostream>#include<queue>using namespace std;int sni[51];const int INF=10000000;int MIN,n,m;struct node { int t,h; node(){}; node(int _t,int _h):t(_t),h(_h){}; friend bool operator<(const node &a,const node&b) { if(a.t!=b.t)re
阅读全文
摘要:View Code /*hdu3974Assign the task并查集建立集合:v u表示v是u的下属T x y 当x被分配到y任务时,他和下属的任务立刻变更为yC x 询问x当前所分配的任务task[i]表示i最后直接接到分配的任务 num[i]表示i接到任务的序号当询问x时 只要找到祖先中最迟分配到的任务,即num[i]最大相对应的task[i]*/#include<iostream>#include<algorithm>using namespace std;const int maxn=50001;int pre[maxn],vis[maxn],task[m
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3926View Code hdu3926Hand in Hand/*题意:判断两幅图是否同构 图中即判断图中环和链的个数是否相同 环和链是否一一相对应利用并查集 一个集合中若人数num[]和拉手对手p[]相等 则为环,num[]==p[]+1则为链*/#include<iostream>#include<set>#include<algorithm>using namespace std;const int maxn=10001;int pre[maxn],p[maxn],
阅读全文
摘要:最近在陆陆续续学习线段树 把学习的点滴汇集起来 也许将来对自己和别人都有所帮助!!首先特别鸣谢NotOnlySuccess(http://www.notonlysuccess.com/?p=978) 我视这位神明为线段树的导师 他的【完全版】造福全人类Hdu1754 I hate it单点更新:最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来View Code #include<iostream>#include<algorithm>using namespace std;int MAXN[4000001],d[4000001];
阅读全文