摘要:
题意:有n个元素,开始每个元素自己一栈,有两种操作,将含有元素x的栈放在含有y的栈的顶端,合并为一个栈。第二种操作是询问含有x元素下面有多少个元素。6M 1 6C 1M 2 4M 2 6C 3C 4输出:102思路:这道题,说不上很难,额,解决它也的确花了比较长的时间。询问x元素下面有多少个元素,那么我只需要统计x元素上面有多少个元素,再用x所在的并查集的根节点的元素个数减去x元素上面的元素个数,结果就出来了......当然,还是有些细节地方要说说的,在路径压缩的时候,有个rang[][3],其中rank[x][0],代表元素x上面有多少个元素,rank[x][1]代表元素x下面有多少个元素, 阅读全文
摘要:
题意:有两个犯罪集团,现在有两种操作,D [a] [b]表示a和b是属于不同犯罪集团的,A [a] [b]是询问你a和b的关系,如果ab属于同一个犯罪集团,输出In the same gang. 如果ab属于不同犯罪集团,输出In different gangs. 否则输出Not sure yet.思路:赤裸裸的种类并查集,0代表ab属于同一集团,1代表不同,要是不在同个树里面,就是不确定.......#include#include#include#includeusing namespace std;#define M 100005int father[M],rank[M];int fin 阅读全文
摘要:
题意:杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。Input第一行是2个整数N和M(N #include#define N 101#define INF 0x7ffffffint mpt[N][N];int dist[N][N];int m,n,minc;int min(int x,int y){ if(xdist[i 阅读全文
摘要:
题意:有n个国家货币,给出m种两个国家之间的货币兑换率,求是否可以盈利.......思路:其实就是看国家货币兑换间是否存在一个环,使得从v点出发时,dis[v]=1,经过环回到v点时,dis[v]>1.......当然,路径是单向的。这个题目的松弛是:dis[i]=n+1次,从而判断这个环不存在“最大路”.....但是,就这题目而已,我们不需要判断最大路是否存在,我们只需要判断,是否可以盈利。可以盈利的话,那么从某个点p出发,经过一个环,回到点p,通过松弛,dis[p]>1,说明可以盈利,否则就是不能。那么可以使用数组进行标记,每次一个点可以松弛(就是满足dis[i]#includ 阅读全文
摘要:
http://codeforces.com/problemset/problem/366/D题意:给出n个点,m条边,a,b,ll,rr分别代表点a,点b相连,点a和点b的区间范围(ll,rr),然后让你选择边相连接使得可以从点1到点n,并且所有被选择的边所共同覆盖的区间范围最大。4 41 2 1 102 4 3 51 3 1 52 4 2 764个点,4条边,现在可以从1--2--4,存在两条路径,(1,10)--(3,5)或者(1,10)——(2,7),要选择这所共同覆盖的区间范围最大的路径,那么就是(1,10)——(2,7),所覆盖的区间范围为7-2+1若是最大区间范围没有,输出-1;思 阅读全文
摘要:
http://codeforces.com/contest/366/problem/C题意:给出n个水果的两种属性a属性和b属性,然后挑选苹果,选择的苹果必须要满足这样一个条件:,现在给出n,k,要你求满足这种条件的苹果a属性之和最大,如果找不到,输出-1.思路:是dp题目,倒是给我提醒比较大。这个题目是可以转化的,转为 所有(aj-k*bj)之和,然后对于任意一个苹果,就是挑与不挑的关系,很明显的背包问题。对于任意一个苹果,如果选择它,则是dp[v-(aj-k*bj)]+aj,不选择它,就是dp[j]自己本身.......额,好像很简单的样子,其实这样是错的。因为(aj-k*bj)可以是负数 阅读全文
摘要:
题目大意:警察抓获N个罪犯,这些罪犯只可能属于两个团伙中的一个,现在给出M个条件(D a b表示a和b不在同一团伙),对于每一个询问(A a b)确定a,b是不是属于同一团伙或者不能确定。思路:如果父亲和孩子是同一个团伙,那么孩子标记为0,如果不是的话,孩子标记为1.然后就是种类并查集的事情了......不难#include#include#include#includeusing namespace std;#define M 100005int father[M],rank[M];int find(int x){ if(x==father[x]) return x; in... 阅读全文
摘要:
不得不说,我得感谢@驱动幽灵百鬼夜行小肆,正是因为看明白了他给出的解析,我才完全弄懂种类并查集的,这里,我也不想去改其他的,就直接引用他的解题报告吧转载:http://blog.csdn.net/c0de4fun/article/details/7318642/** Problem:1182 - 食物链,NOI2001 Begin Time:4th/Mar/2012 1:00 p.m. End Time:4th/Mar/2012 6:47 p.m. Cost Time:两天多,看的别人的解题报告AC的 Reference:http://apps.hi.baidu.... 阅读全文
摘要:
题意:那个城市里要竞选市长,然后在一块墙上可以贴海报为自己拉票,每个人可以贴连续的一块区域,后来帖的可以覆盖前面的,问到最后一共可以看到多少张海报。思路:一看就知道是线段树,只是说要利用到离散化,也不是那么的难,当然注意,有的离散化错误也ac了......当然,在最后没必要还一个个去询问是否覆盖,直接开个标记数组,询问到一个区间只有一个覆盖值,然后进行标记就可以。#include#include#include#includeusing namespace std;#define M 100005struct node{ int ll,rr; int num; int cnt... 阅读全文