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就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...