摘要:
http://poj.org/problem?id=1182看了别人的技巧,最后自己才勉强写出:(摘自poj)kind[a]=0表示a与父节点属于同一类。kind[a]=1表示a吃父节点。kind[a]=2表示父节点吃a。 (后二种情况下的赋值可以改变,但对后续有点小影响)1.有一种关系b是a父节点,c是b父节点, a与c的关系可以表示为 (kind[a]+kind[b])%3 (延续性,适用于多个节点的延续,如3个节点根据二次计算即可完成)2.b是a的父节点,表示为kind[a]. 若父子节点相互反转,即a是b的父节点,kind[b]=(3-kind[a])%3 (反转性)根据延... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1829跟“find them,catch them”思路一样#include//其实只有一个集合,只是在每条边上赋了值罢了,权值 #includeint bin[100002],zt[100002];int findx(int x){ int r=bin[x]; if(x==bin[x]) return bin[x]; bin[x]=findx(bin[x]);//递归方法查找根结点 zt[x]=(zt[x]==zt[r])?0:1;//成立时表示子节点根父亲结... 阅读全文
摘要:
http://poj.org/status?result=0&user_id=297752873#include//#includeint bin[30010],rank[30010];//int findx(int x){ if(bin[x]!=x) bin[x]=findx(bin[x]);//回溯是的压缩路径 return bin[x];}void merge(int x,int y)//这个函数里重要的是启发式合并,rank称为秩,这里是感染总数,但其实也是深度 { int fx,fy; fx=findx(x); fy=findx(y); ... 阅读全文