亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Species Tree 利用HashTable實現實例代碼

2020-01-26 14:16:29
字體:
來源:轉載
供稿:網友

Species Tree 利用HashTable實現

題目再現

題目內容:

給定一個物種演化圖,關系的表示方式如下:x y : 表示x為y的先祖。一個物種只會有一個先祖,一個先祖可以有很多個演化出來的物種,請你找出每個問題詢問物種的祖父物種(先祖的先祖),每個物種會使用一個不重復的編號來表示,如果該物種沒有祖父物種的話或是不存在,那么請將他的祖父物種當是0。(憑空而生)保證所有物種間一定有所關連,且不會有重復演化的現象發生,即演化圖只會是一棵樹。輸入格式:只有一組測資。第一行會有兩個數字N、Q,代表總共有N個物種及Q個問題。接下來N-1行,每一行有兩個數字x、y,意義如題目所述。接下來的Q行,每一行有一個數字Z,代表要詢問的物種編號。測資范圍:1 < N < 100000 < Q < 10000 < x, y, z < 1000000輸出格式:對于每一個詢問的物種編號,將他們的祖父物種編號加總后再輸出。輸入樣例:6 31000 20001000 30002000 40003000 50005000 6000500060001234輸出樣例:4000時間限制:100ms內存限制:16000kb

算法實現

1. 簡單數組下標查找法

  通過題目的要求,這里可以使用最簡單的方法,因為輸入的x , y中,y的值是確定不變的,所以這里可以定義一個y的取值范圍那么大的數組,下標就是y的值,內容就是x的值,這樣查找起來十分方便,時間復雜度是O(1),但是空間上就會浪費比較多了。

#include <stdio.h>#include <string.h>int main(){  int arrBucket[1000000];  int N, Q;  int x, y, z;  long long sum = 0;  memset(arrBucket, 0, sizeof(arrBucket));  scanf("%d %d", &N, &Q);  while(N -- > 1){    scanf("%d %d", &x, &y);    arrBucket[y] = x;  }  while(Q --){    scanf("%d", &z);    if(arrBucket[z] != 0){      if(arrBucket[arrBucket[z]] != 0){        sum += arrBucket[arrBucket[z]];      }    }  }  printf("%lld", sum);  return 0;}

2. Hash表實現

  因為方法1中,浪費空間嚴重,所以這里使用Hash表實現。

#include <stdio.h>#include <stdlib.h>#define NULLKEY -1typedef struct {  int *elem; //元素   int *elemP; //父元素   int count;}HashTable;int Hash(HashTable H, int k){  return k % H.count;}void InitHashTable(HashTable *H){  int i;  H->elem = (int *)malloc(sizeof(int) * H->count);  H->elemP = (int *)malloc(sizeof(int) * H->count);  for(i = 0; i < H->count; i ++){    H->elem[i] = NULLKEY;    H->elemP[i] = NULLKEY;   }}void InsertHash(HashTable *H, int key, int value){  int addr;  addr = Hash(*H, key);  while(H->elem[addr] != NULLKEY){    addr = (addr + 1) % H->count;  }  H->elem[addr] = key;  H->elemP[addr] = value;}int FindHash(HashTable *H, int key, int *addr){  *addr = Hash(*H, key);  while(H->elem[*addr] != key){    *addr = (*addr + 1) % H->count;    if(H->elem[*addr] == NULLKEY || *addr == Hash(*H, key)){      return 0;    }  }  return 1;}int main(){  int N, Q;  int x, y, z, addr;  long long sum = 0;  HashTable H;  scanf("%d %d", &N, &Q);  H.count = N - 1;  InitHashTable(&H);  while(N -- > 1){    scanf("%d %d", &x, &y);    InsertHash(&H, y, x);  }  while(Q --){    scanf("%d", &z);    if(FindHash(&H, z, &addr)){      if(FindHash(&H, H.elemP[addr], &addr)){        sum += H.elemP[addr];      }    }  }  printf("%lld", sum);  return 0;}

3. 用C++的map來實現

  看著用C實現起來,相對來說實現的各個功能都要自己寫,這里看一下用C++的STL里面的map來實現上面的題目,非常簡單(不得不說STL真的很好用,但是不如HashTable速度快,空間上也不如HashTable占用的?。?/p>

#include <iostream>#include <map>using namespace std;int main() {  int n, q;  cin >> n >> q;  map<int,int> mp;   map<int,int>::iterator it;  int x, y, z;  for (int i=1; i<n; ++i) {      cin >> x >> y;    mp.insert(pair<int,int>(y,x));    }  int sum = 0;  for (int i=0; i<q; ++i) {    cin >> z;    it = mp.find(z);      if (it != mp.end()) {      it = mp.find(it->second);        if (it != mp.end())        sum += it->second;      }  }  cout << sum;  return 0;}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
92福利视频午夜1000合集在线观看| 亚洲一区美女视频在线观看免费| 亚洲综合日韩在线| 日韩精品中文字幕在线播放| 国产69精品久久久久99| 在线播放国产精品| 国产午夜精品久久久| 日韩最新av在线| 亚洲国产精彩中文乱码av| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧美激情精品一区二区| 欧美丝袜第一区| 亚洲欧美中文字幕| 亚洲人成网站777色婷婷| 在线日韩精品视频| 国产精品视频区1| 亚洲欧美在线看| 欧美电影免费播放| 岛国av一区二区| 久久久免费在线观看| 久久久免费电影| 日韩电影第一页| 97国产真实伦对白精彩视频8| 亚洲日本aⅴ片在线观看香蕉| 久久久久久久久久国产精品| 久久69精品久久久久久久电影好| 97精品国产97久久久久久免费| 日韩在线视频网站| 91中文精品字幕在线视频| 色综合五月天导航| 成人av在线亚洲| 国产玖玖精品视频| 欧美专区福利在线| 国产成人亚洲综合91| 26uuu国产精品视频| 国产ts一区二区| 国产精品观看在线亚洲人成网| 欧美精品做受xxx性少妇| 日韩av在线直播| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲国产精品久久久久秋霞不卡| 亚洲成人精品久久| 国产综合在线视频| 亚洲综合在线做性| 欧美在线影院在线视频| 国产精品99久久久久久久久| 亚洲成人精品视频在线观看| 亚洲福利视频免费观看| 亚洲xxxx18| 国产成人在线播放| 亚洲国产精品推荐| www.亚洲成人| 日韩中文字幕精品视频| 亚洲女人天堂成人av在线| 亚洲а∨天堂久久精品9966| 亚洲尤物视频网| 欧美日本精品在线| 国产精品美女久久久免费| 夜夜嗨av色一区二区不卡| 国产精品wwwwww| 欧美日韩中文字幕在线| 国产精品人成电影在线观看| 亚洲精品美女久久久| 亚洲女人天堂av| 国内精品小视频在线观看| 狠狠久久五月精品中文字幕| 亚洲国产精品人人爽夜夜爽| 中文日韩在线视频| 久久综合免费视频影院| 欧美日韩综合视频网址| 欧美成人精品在线视频| 69av在线播放| 色偷偷av一区二区三区乱| 亚洲一区二区三区香蕉| 国产精品色悠悠| 精品高清一区二区三区| 欧美制服第一页| 亚洲精品动漫久久久久| 亚洲国产另类久久精品| 色综合久久中文字幕综合网小说| 97成人在线视频| 亚洲成人av片在线观看| 亚洲欧美综合图区| wwwwwwww亚洲| 中文字幕精品影院| 色婷婷av一区二区三区久久| 国产美女久久精品香蕉69| 亚洲人成网在线播放| 久久久久中文字幕2018| 久久综合免费视频| 久久成人免费视频| 亚洲视频在线观看| 欧美成人亚洲成人日韩成人| 日韩一区二区三区在线播放| 国产精品夜间视频香蕉| 日韩欧美在线网址| 亚洲精品久久久久久久久| 国产91精品最新在线播放| 亚洲少妇中文在线| 日本在线观看天堂男亚洲| 97视频人免费观看| 91大神福利视频在线| 亚洲一级免费视频| 日韩av片免费在线观看| 日韩中文字幕不卡视频| 成人免费视频网| 中文字幕不卡在线视频极品| 国产激情久久久| 91av视频在线观看| 欧美成人在线免费| 久久久精品视频在线观看| 日韩精品视频在线播放| 久久天天躁狠狠躁夜夜爽蜜月| 久久噜噜噜精品国产亚洲综合| 成人免费视频网址| 亚洲人免费视频| 久久综合伊人77777蜜臀| 国a精品视频大全| 97香蕉久久超级碰碰高清版| 91高潮精品免费porn| 久久躁日日躁aaaaxxxx| 久久中文字幕在线| 亚洲国产精品小视频| 亚洲欧美日韩精品久久奇米色影视| 精品无码久久久久久国产| 久久影视电视剧免费网站清宫辞电视| 国产精品一区二区三区在线播放| 色偷偷噜噜噜亚洲男人的天堂| 欧美在线视频a| 黑人巨大精品欧美一区二区三区| 亚洲人a成www在线影院| 亚洲欧美国产精品专区久久| 另类图片亚洲另类| 91精品国产高清久久久久久91| 欧美黑人xxxx| 永久免费毛片在线播放不卡| 日本欧美黄网站| 亚洲国产成人精品一区二区| 亚洲黄色在线观看| 亚洲精品成人久久久| 中文字幕在线看视频国产欧美| 久久艹在线视频| 久色乳综合思思在线视频| 91精品国产电影| 欧美日韩亚洲视频一区| 黄色成人在线免费| 青青草原一区二区| 国产高清视频一区三区| 欧美激情国产精品| 久久久久久91香蕉国产| 日韩激情av在线播放| 国产精品久久久久久av下载红粉| 国产激情久久久| 美日韩丰满少妇在线观看| 日韩一区视频在线| 欧美日韩国产精品一区二区三区四区| 日韩欧美视频一区二区三区| 国产小视频91| 亚洲精选中文字幕| 亚洲欧洲视频在线| 久久777国产线看观看精品| 亚洲精品v欧美精品v日韩精品| 国产欧美最新羞羞视频在线观看| 国产91露脸中文字幕在线|