中文題意不再贅述
說一下做題思路,題目大意是求乙個最小生成樹,題目規定只能滑向小於等於的點,那麼說明圖中存在雙向邊和單向邊,輸入的時候要判斷兩個點的高度
然後由題意我們知道,我們必須由1號點出發,那麼我們必定有一些點去不了,那麼這些點會干擾我們做題,尤其是干擾最小生成樹,那麼我們可以從1號點開始擴充套件,因為我們輸入邊的時候已經確定了高度關係,所以擴充套件的時候不需要考慮高度,因為我們從一開始擴充套件,那麼能擴充套件到的點一定都能去,那麼我們只需要考慮,當前要搜的點有沒有被搜過,用vis陣列標記,搜過就直接連邊,丟到新圖中,沒搜過就連邊之後,再dfs這個點,注意每當有乙個點沒搜過,那麼就讓計數器cnt++,代表多了乙個能到達的節點,然後是最小生成樹,我們不能只考慮邊權的大小,題目要求在能去的點數最多的情況下保證邊權最小,那麼我們給邊權排序時,多加乙個判斷條件,即當前點的高度越高,這條邊的排名越靠前,因為高度越高,那麼能去的點可能就越多,第二關鍵字是邊權,然後跑kru就可以了,注意能到達的點數要加上1號點,然後結果是64位整型,也就是long long,最後插一句,洛谷資料弱,建議去bzoj提交,不過洛谷能看到自己怎麼錯的,這也是極好的
**
//by acermo
#include#include#include#include#include#include#includeusing namespace std;
const int m=1005000;
int n,m;
int high[m],vis[m];
int fa[m],siz[m];
long long int cnt,ans,tot;
struct edge
add;
vectorv[m];
struct edg
}now;
priority_queueq;
void built(int x)
return ;
}int find(int x)
void unionn(int a,int b)
void kru() }}
void constt()
int main()
vis[1]=1;built(1);kru();
cout
}
洛谷 P2805 BZOJ 1565 植物大戰殭屍
plants vs.zombies pvz 是最近十分風靡的一款小遊戲。plants 植物 和zombies 殭屍 是遊戲的主角,其中plants防守,而zombies進攻。該款遊戲包含多種不同的挑戰系列,比如protect your brain bowling等等。其中最為經典的,莫過於玩家通過控...
BZOJ2763 洛谷P4568飛行路線
題目中文不再贅述直接開講 題目中要求最短,那麼肯定要跑最短路 我這裡用的玄學u優化spfa據說不優化會t,具體如何優化可以參考一下我的部落格,玄學優化 那麼如何跑出不選一些邊的最短路呢?暴力列舉?顯然不是很現實,所以我們要引入乙個新的演算法叫做分層圖最短路,顧名思義,將乙個圖拆成若干個圖,每個圖中有...
BZOJ2140 穩定婚姻(洛谷P1407)
洛谷題目傳送門 bzoj題目傳送門 乙個unsafe的情況就是把當前邊拆掉後仍然有增廣路。我們把原來夫妻的邊由女方連到男方,舊情的邊由男方連到女方。這樣也是乙個二分圖,但是可能出現環。把這些環縮起來,可以證明如果夫妻都在乙個強連通分量裡就是unsafe的。因為如果在環上斷了一條邊,由於是偶環,一定能...