• 推导部分和(蓝桥杯)


    我要是早点复习一下带权并查集 当时这个题就能A掉了 啊啊啊啊啊啊心态爆炸

    这就是一个带权并查集的模板题啊

    给出[l,r]的区间和,相当于s[r]-s[l]

    一旦已经知道了 s[a]-s[b],s[b]-s[c],显然再给出一条[a,c]就可以判断"真假"了

    将每条这样的信息(l,r,w),l,r放入一个集合中,

    用并查集来维护,并维护cha[l]=s[root]-s[l],cha[r]=s[root]-s[r]

    若 l,r已经在同一个集合中,就直接查询cha[l]-cha[r],判读与w是否相等

    合并操作是灵魂

    #include<bits/stdc++.h>
    using namespace std;
    #define lowbit(x) x&(-x)
    #define ll long long
    const int maxn=1e5+5;
    ll val[maxn];
    int fa[maxn];
    int n,m,Q;
    int find(int x){
    	if(x==fa[x])return x;
    	int oldfa=fa[x];
    	fa[x]=find(fa[x]);
    	val[x]+=val[oldfa];
    	return fa[x];
    }
    int main(){
    	cin>>n>>m>>Q;
    	for(int i=0;i<=n;i++)fa[i]=i; 
        for(int i=1;i<=m;i++){
        	ll L,R,S;
        	cin>>L>>R>>S;
        	L--;
        	int fx=find(L),fy=find(R);
        		fa[fy]=fx;
        		val[fy]=val[L]-val[R]-S;
    	}
    	while(Q--){
    		int L,R;
    		cin>>L>>R;
    		L--;
    		int fx=find(L),fy=find(R);
    		if(fx!=fy)
    		cout<<"UNKNOWN"<<endl;
    		else cout<<val[L]-val[R]<<endl;
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    zoj 3233 容斥原理 + 双条件
    bzoj 1038 瞭望塔 半平面交 + 最小值 枚举
    linux 常用命令
    Vue路由
    luffycity项目开发
    Vue组件化开发
    Vue对象提供的属性功能
    Vue快速入门
    Django-DRF(路由与扩展功能)
    Django-DRF(视图相关)
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/16184744.html
Copyright © 2020-2023  润新知