摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4263思路:将红边和蓝边单独求一次生成树,求的红边最多可以加入的边数cntr,蓝边最多可以加入的边数cntb,只要k满足条件k>=(n-1-cntr)&&k<=cntb,就说明可以生成这样的spanning tree. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2818思路:Count[i]表示i下面的积木个数,路径压缩的时候更新一下即可,sum[i]表示以i为根的积木的个数。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 30000+30 7 int parent[MAXN]; 8 int sum[MAXN],Coun 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3047思路:冲突的条件是:两个人坐在同一行,同时他们到根节点的差值等于他们之间的差值,这时就产生冲突了。于是我们可以用一个dist数组来保存节点到根的距离,而这个距离在路径压缩的时候更新一下就可以了,dist[x]+=dist[parent[x]]。然后就是合并后的距离,令r1=Find(u),r2=Find(v),于是合并时就有parent[r2]=r1,dist[r2]=dist[u]+w-dist[v]。盗用一张图: 1 #include<iostream> 2 #include& 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1558思路:主要是判断线段相交,如果相交,就是要合并了,并且修改一下sum值就可以了。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 #define MAXN 1111 8 #define eps 1e-7 9 int parent[MAX 阅读全文