zoukankan      html  css  js  c++  java
  • HDU 3038 How Many Answers Are Wrong (扩展并查集)

    题意:每次告诉你区间LR的和为多少,然后有时的输入是有冲突的,问你有冲突的有几个

    思路:不怎么会这个,这一类的并查集之前用的不是很多,有一篇讲的很好的博客(传送门),这里面讲解的向量偏移解决了我困惑多年的疑问,但换了个角度写就一直wa,很烦

    代码:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    typedef long long LL;
    inline LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    const int maxn=200010;
    int fa[maxn];
    int sum[maxn];
    
    int Find(int x)
    {
        if(x!=fa[x]){
            int t=fa[x];
            fa[x]=Find(fa[x]);
            sum[x]+=sum[t];
        }
        return fa[x];
    }
    
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m)){
            for(int i=0;i<=n;i++){
                fa[i]=i;
                sum[i]=0;
            }
            int ans=0;
            while(m--){
                int a=read(),b=read(),w=read();
                a--;
                int rta=Find(a);
                int rtb=Find(b);
                if(rta==rtb){
                    if(sum[a]-sum[b]!=w)ans++;
                }
                else{
                    fa[rta]=rtb;
                    sum[rta]=-sum[a]+sum[b]+w;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Failed to convert WOFF 2.0 font to SFNT 字体图标显示不出来
    每日一字:困
    每日一字:biáng
    sqlserver数据类型简记
    每日一字:天
    可以作为今生目标的一句话
    每日一字:惑
    [转载]优秀程序员的12中能力
    每日一字:怒
    [转载]像树一样活着
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/9880034.html
Copyright © 2011-2022 走看看