BZOJ 1202: [HNOI2005]狡猾的商人

来源:互联网 发布:mac rar解压软件下载 编辑:程序博客网 时间:2024/05/29 04:54

题目

1202: [HNOI2005]狡猾的商人

题解

,,都五月份了我还这么傻逼。
一共n个前缀,每次给出两个之间的关系,问是否有冲突。
这nm是做了千万遍的题啊。
带权并查集。我居然还把带权并查集写错了还不知道哪错了。233

代码

//QWsin#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=100+10;int p[maxn],v[maxn];int findset(int x){    if(p[x]==x) return x;    int t=findset(p[x]);//带权并查集合并的顺序不要弄错了    v[x]+=v[p[x]];    return p[x]=t;}inline int getv(int l,int r){    return v[r]-v[l];   }inline void solve(){    int n,m;cin>>n>>m;int ok=1;    for(int i=0;i<=n;++i) p[i]=i,v[i]=0;    for(int i=1,l,r,w;i<=m;++i)    {        scanf("%d%d%d",&l,&r,&w);--l;        if(!ok) continue;        int pa=findset(l);        int pb=findset(r);        if(pa==pb){            if(v[r]-v[l]!=w) {ok=0;puts("false");}        }        else{p[pb]=pa;v[pb]=w-v[r]+v[l];}    }    if(ok) puts("true");}int main(){    int T;cin>>T;    while(T--) solve();    return 0;}