bzoj1202 [HNOI2005]狡猾的商人
昨天宛如一个傻子...(居然机房rank2??)做个珂谷公开赛,结果遇到了貌似很高深的带权并查集,然后一早上心血来潮就想学:百度一下,诶,食物链?我好像A了,bzoj1202?好像在哪里见过?哦,原来是个sb算法(莫非以前学过?)
这道题就是维护一个d数组记录月份到父亲节点的距离就行了
#include<cstdio> #include<cstring> using namespace std; int fa[110],d[110]; int findfa(int x) { if(x!=fa[x]) { int t=findfa(fa[x]); d[x]+=d[fa[x]]; fa[x]=t; } return fa[x]; } int main() { int T; scanf("%d",&T); while(T--) { int n,m,x,y,c; scanf("%d%d",&n,&m); for(int i=0;i<=n;i++)fa[i]=i, d[i]=0; bool bk=true; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&c);x--; int fx=findfa(x),fy=findfa(y); if(fx!=fy) { d[fx]=d[y]-d[x]-c; fa[fx]=fy; } else { if(d[y]-d[x]!=c)bk=false; } } if(bk==true)printf("true\n"); else printf("false\n"); } return 0; }
pain and happy in the cruel world.