題目鏈結
題意:給定乙個n*m的矩陣,裡面有標號為1到n*m的植物,這些植物可以合併,題目將給出k對合併的植物,問合併以後,還有多少顆植物(意思是假如1和2合併了,那麼就只算1顆)
思路:簡而言之,就是求聯通塊的數量。那麼有兩種常用的方法
1.並查集
2.dfs
並查集很好理解,將能合併的連在一起就行。
dfs呢就是求聯通塊的數量。
反正很簡單,直接寫就行了。
反思:好久沒寫前向星了。
dfs**:
#include using namespace std;
const int maxn=1e6+7;
int head[maxn];
int cnt;
bool vis[maxn];
struct edge
edge[maxn*2];
void addedge(int u,int v)
void init()
void dfs(int u)
}int main()
int main()
for(int i=1,u,v;i<=k;i++)
}int ans=0;
for(int i=1;i<=n*m;i++)
}cout
}
藍橋杯 歷屆試題 合根植物 並查集
問題描述 w星球的乙個種植園,被分成 m n 個小格仔 東西方向m行,南北方向n列 每個格仔裡種了一株合根植物。這種植物有個特點,它的根可能會沿著南北或東西方向伸展,從而與另乙個格仔的植物合成為一體。如果我們告訴你哪些小格仔間出現了連根現象,你能說出這個園中一共有多少株合根植物嗎?輸入格式 第一行,...
藍橋杯歷屆試題 合根植物 並查集
藍橋杯歷屆試題 合根植物是一道簡單的並查集問題,並查集演算法的核心是把兩個點連通起來的函式和找到某個點的根節點的函式,本文把這兩個函式定義成join 和find 先寫出這兩個函式的原型 int find int x 如果看不懂壓縮路徑的寫法可以看下面這個 intfind int x return x...
藍橋杯歷屆試題 合根植物(並查集)
問題描述 w星球的乙個種植園,被分成 m n 個小格仔 東西方向m行,南北方向n列 每個格仔裡種了一株合根植物。這種植物有個特點,它的根可能會沿著南北或東西方向伸展,從而與另乙個格仔的植物合成為一體。如果我們告訴你哪些小格仔間出現了連根現象,你能說出這個園中一共有多少株合根植物嗎?輸入格式 第一行,...