1. 程式人生 > >【bzoj 1202】狡猾的商人(帶權並查集)

【bzoj 1202】狡猾的商人(帶權並查集)

傳送門biu~
si表示前i個月份的收入和。每條資訊(l,r,v)相當於是在說srsl1=v,可以用帶權並查集來將l1月份和r月份合併。設root月份為i月份所在的集合中的根,那麼維護一個disi來表示i點到根的距離,即disi=sisroot
①當把兩個不在同一個集合裡的元素xyv合併時,設x的根為xny的根為yn,則disx=sxsxn,disy=sysyn,v=sysx。如果用xn作為新集合的代表元素,那麼

disyn=disx+vdisy
②假設xy已經在同一個集合中,距離為v,只需要驗證disy是否等於disx+v,如果不相等則不成立。

#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