您当前的位置: 首页 > 

对方正在debug

暂无认证

  • 3浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

带权并查集

对方正在debug 发布时间:2021-09-09 23:34:07 ,浏览量:3

学习链接:https://blog.csdn.net/chenguolinblog/article/details/7985370?spm=a2c4e.10696291.0.0.2ce319a4sYGZPg

习题链接:https://yq.aliyun.com/articles/252458?spm=a2c4e.11153940.0.0.42a1757bQt463q

How many answers are wrong

HDU 3038

题解&代码:https://www.cnblogs.com/liyinggang/p/5327055.html

#include 
#include 
#include 
using namespace std;
const int N =200010;
int father[N];
int sum[N];  ///记录当前结点到根结点的距离

int _find(int x){
    if(x!=father[x]){
        int t = father[x];
        father[x] = _find(father[x]);
        sum[x]+=sum[t];
    }
    return father[x];
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(int i=0;i n){
        ans++;
        return;
    }
    int fx = find(x);
    int fy = find(y);
    int v = mark == 1 ? 0 : 1;
    if(fx != fy){
       father[fx] = fy;
       rank[fx] = (rank[y]+v-rank[x]+3)%3;
    }
    else{
       if(rank[x] != (rank[y]+v)%3)
         ans++;
    }
}
 
int main(){
    int mark , x , y;
    scanf("%d%d" , &n , &m);
    init();
    ans = 0;
    for(int i = 0 ; i             
关注
打赏
1664895754
查看更多评论
0.0979s