BZOJ2753 洛谷P2753滑雪

2021-08-20 23:14:49 字數 1138 閱讀 2978

中文題意不再贅述

說一下做題思路,題目大意是求乙個最小生成樹,題目規定只能滑向小於等於的點,那麼說明圖中存在雙向邊和單向邊,輸入的時候要判斷兩個點的高度

然後由題意我們知道,我們必須由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的。因為如果在環上斷了一條邊,由於是偶環,一定能...