首页 > 代码库 > BZOJ 1202 狡猾的商人

BZOJ 1202 狡猾的商人

前缀和+带权并查集。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define maxn 150using namespace std;int tt,n,m,s,t,v,fath[maxn],dis[maxn],flag=1;int getfather(int x){    if (fath[x]==x) return x;    int ret=getfather(fath[x]);    dis[x]+=dis[fath[x]];    fath[x]=ret;    return ret;}void unionn(){    if (!flag) return;    int f1=getfather(s),f2=getfather(t+1);    if (f1==f2)    {        if (dis[t+1]-dis[s]!=v) flag=0;        }    else    {        fath[f2]=f1;        dis[f2]=v+dis[s]-dis[t+1];    }    return;}void work(){    flag=1;    scanf("%d%d",&n,&m);    for (int i=1;i<=n+1;i++)    {        fath[i]=i;        dis[i]=0;    }    for (int i=1;i<=m;i++)    {        scanf("%d%d%d",&s,&t,&v);        unionn();            }    if (flag) printf("true\n");        else printf("false\n");}int main(){    scanf("%d",&tt);    for (int i=1;i<=tt;i++)        work();    return 0;}

 

BZOJ 1202 狡猾的商人