【bzoj 1202】狡猾的商人(帶權並查集)
傳送門biu~
設表示前個月份的收入和。每條資訊相當於是在說,可以用帶權並查集來將月份和月份合併。設月份為月份所在的集合中的根,那麼維護一個來表示點到根的距離,即。
①當把兩個不在同一個集合裡的元素和用合併時,設的根為,的根為,則。如果用作為新集合的代表元素,那麼
②假設和已經在同一個集合中,距離為,只需要驗證是否等於,如果不相等則不成立。
#include<bits/stdc++.h>
using namespace std;
struct data{int l,r,num;}a[1005];
int father[105],dis[105];
int search(int x){
if(father[x]==x) return x;
int fa=search(father[x]);
dis[x]+=dis[father[x]];
return father[x]=fa;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m;bool flag=false;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;++i) father[i]=i,dis[i]=0;
for(int i=1;i<=m;++i) scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].num);
for (int i=1;i<=m;++i){
int x=a[i].l-1,y=a[i].r,z=a[i].num;
int xn=search(x),yn=search(y);
if(xn^yn) dis[yn]=dis[x]+z-dis[y],father[yn]=xn;
else if(dis[y]!=dis[x]+z){flag=true;break;}
}
printf(flag?"false\n":"true\n");
}
return 0;
}
相關推薦
【bzoj 1202】狡猾的商人(帶權並查集)
傳送門biu~ 設sisi表示前ii個月份的收入和。每條資訊(l,r,v)(l,r,v)相當於是在說sr−sl−1=vsr−sl−1=v,可以用帶權並查集來將l−1l−1月份和rr月份合併。設root
BZOJ1202:狡猾的商人(帶權並查集)
else class puts tex algorithm str 修改 任務 scrip 1202: [HNOI2005]狡猾的商人 題目鏈接:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 Descriptio
【NOIP 校內模擬】T1 line(帶權並查集)
很無奈 離正解就差一句話 簡單的帶權並查集 沒啥好說的 也可以差分約束 #include<bits/stdc++.h> #define N 100005 #define M 200005 #define D 10005 using namespace std; template<class
Cube Stacking 【POJ - 1988】【並查集(帶權並查集)】
題目連結 題意就是給你一串箱子,題目中沒有給出箱子的數量,問你經過一系列移動之後,某個ID箱子下面有幾個箱子,然後移動是把這一整列都按照原來的順序放在另一列的頂端上去。 所以,我想到了用並查集來寫,對於一個箱子,我們把它放到另一列箱子的上面,我們可以維護下
Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(帶權並查集/差分約束系統)
pen ems http type 判斷 put .com 就是 algo 題面 Bzoj 洛谷 題解 考慮帶權並查集,設\(f[i]\)表示\(i\)的父親(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]
HDU3635 Dragon Balls(帶權並查集)
align size any cat webkit city ret follow num 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=3635 題目描述: Dragon Balls Problem Descript
並查集——poj2236(帶權並查集)
algorithm blog oid poj2236 stream 命令 net 最大 spa 題目:Wireless Network 題意:給定n臺已損壞計算機的位置和計算機最遠通信距離d,然後分別根據命令執行以下兩種操作: "O p" (1 <= p <=
HDU - 3038 / 3048 (帶權並查集) (待補)
hdu return bsp value 題目 ios i++ mes sca 題目鏈接:點我點我 題意: 題解: 兩題代碼差不多,放個3047的。 1 #include <cstdio> 2 #include <iostream>
HDU 3038 How Many Answers Are Wrong(帶權並查集)
define pro tor memset set sizeof fin printf class 題目鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1272 題目大意:有n條信息,每條信息都給出區間l到r的值,如果
POJ 1182 食物鏈 (帶權並查集)
動物 return i++ rip width d+ oid body 思維 食物鏈 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78551 Accepte
poj1703 Find them, Catch them(帶權並查集)
har find 輸出 scanf -- oot n) puts stdin 題目鏈接 http://poj.org/problem?id=1703 題意 有兩個幫派:龍幫和蛇幫,兩個幫派共有n個人(編號1~n),輸入m組數據,每組數據為D [a][b]或A [a][
poj2492 A Bug's Life(帶權並查集)
tab set 復雜 鏈接 image 之間 判斷 clu 成了 題目鏈接 http://poj.org/problem?id=2492 題意 蟲子有兩種性別,有n只蟲子,編號1~n,輸入m組數據,每組數據包含a、b兩只蟲子,表示a、b為不同性別的蟲子,根據輸入的m組
poj1182 食物鏈(帶權並查集)
txt amp 帶權並查集 htm 代碼 || blog 參考 oid 題目鏈接 http://poj.org/problem?id=1182 思路 前面做的帶權並查集的權值記錄該結點與其父結點是否是同一類,只有兩種取值情況(0,1),在這題中某結點a和其父結點b的取
POJ 1988 Cube Stacking (帶權並查集)
ons from += same file rep stream scribe 並查集 Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes label
HihoCoder - 1515 分數調查 (帶權並查集)
amp code space blog contain script += esp 判斷 小Hi的學校總共有N名學生,編號1-N。學校剛剛進行了一場全校的古詩文水平測驗。 學校沒有公布測驗的成績,所以小Hi只能得到一些小道消息,例如X號同學的分數比Y號同學的分數高S分
食物鏈(帶權並查集)
clu style org 之間 i++ init esc rip 但是 題目鏈接:http://poj.org/problem?id=1182 題目: Description 動物王國中有三類動物A,B,C,這三類動物的食物鏈構成了有趣的環形。A吃B, B吃C,C吃
HDU1289 A Bug's Life (帶權並查集)
clu some assume ever different 合並操作 ports main separate HDU1289 帶權並查集 Problem Description Background Professor Hopper is researching the
銀河英雄傳說(帶權並查集)
lse space std 如果 print code i++ int 維護 題意就是要維護並查集,切詢問兩個點是不是在一棵樹上,如果是,輸出他們間的數減一 #include<iostream> #include<cstdio> using name
How Many Answers Are Wrong(帶權並查集)
題目: TT and FF are … friends. Uh… very very good friends -________-b FF is a bad boy, he is always wooing TT to play the following game with him.
HDU 3038 How Many Answers Are Wrong (帶權並查集)
Problem Description TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always wooing TT to play t