入秋以來,睏意綿綿,特此刷題,清醒一下。
題目如下:
bytedance efficiency engineering 團隊在8月20日搬入了學清嘉大廈,為慶祝團隊的喬遷之喜,位元組軍決定邀請ee團隊,舉辦乙個大型交友會。每每題目說道這裡肯定有乙個問題,那麼問題如下:
ee團隊一共有n個人,大家都比較害羞,不善於和陌生人交流,這n個人都向位元組君提供了自己認識人的名字,但不包括自己(我想是因為乙個人可能一生都沒有辦法清醒的認識到自己吧)。如果a的名單裡有b,或者b的嗎名單裡有a,則代表a和b是互相認識的。同時,如果a認識b,b認識c,則代表a,c也會很快認識,畢竟是通過b這個小媒婆介紹的,兩人就可以很快互相認識了。
位元組君打算將整個團隊分成m組,每組內人員全都可以通過間接或者直接的方式互相認識,而組間的人員互相都不認識。
請您確定乙個方案,確定m的最小值。
輸入描述:一開始看這題,以為是要求圖的聯通分量,又要開闢空間,效率很定不高。所以改為用並查集來做這件事情,因為並查集可以很好的解決這種相親交友,道路修建問題。第一行乙個整數n,代表這個團隊一共有n個人,從1開始編號。
接下來有n行,第x+1行代表編號為x的人認識的人的編號 k (1<=k<=n),每個人的名單以0代表結束。
輸出描述:
乙個整數m,代表可以分割的最小的組的個數。
輸入例項:
10 0
5 3 0
8 4 0
9 0
9 0
3 0
0 7 9 0
0 9 7 0
輸出:
2
並查集,在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。並查集是一種樹型的資料結構,用於處理一些不相交集合(disjoint sets)的合併及查詢問題。常常在使用中以森林來表示。
下面說一說並查集的兩個最重要的操作,並和查
一、查詢操作:
//將此團隊中的每個人進行編號,id[x]儲存了標號為x的人它的祖先,例如,id[3]=6,則說明,編號為3的這個人,它的祖先的編號為6,類似於樹的儲存結構。
//如果,這個人他很孤單,它不認識任何人,那麼他的祖先就是他自己,即id[3]=3
int find(int x) // x為某個人的編號
return x; //最終轉換到根節點
}
二、合併操作:void union(int p,int q) //找 p,q兩個人的祖先,看誰包含的元素多,就將另乙個根節點掛到這個元素多的根節點上。也就是弱者被吞併了。
else
}
也可以加乙個判斷連通性的操作:
bool connected(int p,int q)
return
false;
}
本題的全部**:
#include
#include
#include
#include
using namespace std;
const
int n(100001);
int n,m,q;
int sz[n];//以當前節點為根的子樹中節點的個數,即為權重
intid[n];
bool ff[n]= ;
int find(int x)
return x;
}void union(int p,int q)
else
}bool connected(int p,int q)
return
false;
}int main()
for (int i=1; i<=n; i++)
else}}
int ans=0;
for (int i=1; i<=n; i++)
printf("%d\n",ans);
return
0;}
還有一點輸入輸出的技巧沒記完,下午接著寫寫,好餓好餓,去吃飯了~~~~~~ 今日頭條程式設計題
第一題 p為給定的二維平面整數點集。定義 p 中某點x,如果x滿足 p 中任意點都不在 x 的右上方區域內 橫縱座標都大於x 則稱其為 最大的 求出所有 最大的 點的集合。所有點的橫座標和縱座標都不重複,座標軸範圍在 0,1e9 內 如下圖 實心點為滿足條件的點的集合。請實現 找到集合 p 中的所有...
演算法題 2018今日頭條程式設計題二
使用dp i,j 表示區間 i,j 能得到計算值的最大值 k表示區間 i,j 的最小值min的下標索引 則序列結構可表示如下 i,k 1 min k 1,j i,j 所有子區間分為兩種情況 包含min 不包含min 在所有包含min的子區間 m,n 中,計算值 mi n su m m,n mi n ...
演算法題 2018今日頭條程式設計題一
維持乙個當前邊界點的陣列,按x從小到達排序,由於是邊界點,故其y對應是從大到小排序的。對於乙個新加入的點,分別按x和y座標值二分查詢其在邊界點陣列中的位置 iter x iter y include include include include include include using name...