bzoj3651 3081 網路通訊

2022-08-26 14:48:33 字數 1398 閱讀 6291

time limit: 10 sec  memory limit: 256 mb

submit: 50  solved: 37

[submit][status][discuss]有乙個由m 條電纜連線的 n 個站點組成的網路。為了防止壟斷,由 c 個公司控制所有的電纜,規定任何公司不能控制連線同乙個站點的兩條以上的電纜(可以控制兩條)。同時規定,每個公司不能有多餘的電纜,所謂的多餘,是指屬於同乙個公司的電纜不能形成環。  

在運作過程中,不同公司之間會進行電纜買賣。請你寫乙個程式判斷買賣是否合法。 

輸入第一行有4個由空格隔開的整數 n,m,c和 t。n(1≤n≤ 8 000)表示站點數,m(0≤m≤100 000)表示連線站點的電纜數。c(1≤c≤ 100)表表示公司數量,t 表示電纜買賣次

數。後面有m行,每行三個整數sj1,sj2和kj,表示連線站點sj1和sj2(1≤sj1< sj2  ≤ n)的電纜屬於kj(1≤kj≤c)公司擁有,任意兩個站點只有一條直接相連的電纜,輸入狀態合法。最後t(0≤t≤100 000)行,每行三個整數 si1, si2和  ki,表示 ki公司想購買站點si1和si2之間的電纜。 

輸出共 t行,表示處理的結果,有以下幾種可能的結果: 

1、「no such cable.」  兩個站點間沒有電纜。 

2、 「already owned.」  電纜己經是 ki 公司控制。 

3、 「forbidden: monopoly.」 ki 公司己經控制了兩條連線 si1  或  si2 的電纜。 

4、 「forbidden: redundant.」 ki 公司控制的線路會出現環。 

5、 「sold.」  可以買賣。

4 5 3 5

1 2 1

2 3 1

3 4 2

1 4 2

1 3 3

1 2 3

1 2 3

1 4 3

2 3 3

2 4 3

sold.

already owned.

forbidden: monopoly.

forbidden: redundant.

no such cable.

題意有點長,直接貼了。。。

思路:首先對於每個公司分別建一棵動態樹,把每條邊hash一下,分情況做。

對於第一種情況,在hash裡找一遍即可。

對於第二種情況,在hash裡找到這條邊,看之前擁有的公司與現在是否相同。

對於第三種情況,記錄每個公司對於每個點擁有幾條邊,就是度數,如果交易前度數已經為2,則交易失敗。

對於第四種情況,在該公司的動態樹中判斷要連的兩點是否在同乙個連通塊中,是則交易失敗。

對於第五種情況,交易成功,在hash中修改,在原公司的動態樹中刪去原邊,在新公司的動態樹中加去新邊,交易成功。

bzoj1834 網路擴容

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數 邊數以及所需要增加的流量。接下來的m行每行包含四個整數u,v...

bzoj1146 網路管理

發現是鏈上的問題,所以樹鏈剖分 發現要查詢第k大,因為第k大不支援合併,所以要二分答案 二分答案後相當於詢問一些區間內大於某數的數個數,直接線段樹套平衡樹即可 時間複雜度 o nlog n 跟 o n 有什麼區別 可以卡過 1 include2 using namespace std 3 defin...

bzoj1834 網路擴容 網路流

好久沒寫題解了啊 給你一幅n個點的網路,先求出其1到n的最大流,每條弧還會有個屬性co sti cos ti 表示沒擴容乙個單位的費用,現在我們要求的就是擴容k個單位的最小費用 這是一道比較裸的網路流,第一問直接dinic就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...