FZU2192 位置資訊挖掘

2022-01-19 09:54:01 字數 1647 閱讀 1165

o2o即online to offline,是指將線下的商務機會與網際網路結合,讓網際網路成為線下交易的前台。這些商務機會主要是偏服務類的商品,例如汽車售後服務、攝影服務、餐飲、電影等,其特色是線上購買、線下服務。

現在,jason給出使用者在移動端的購買行為資料,以及商品集合,希望能補全一些缺失的位置資訊。為了簡化問題,假設:

1、由於是服務類的商品,如果使用者位於城市a,那麼該使用者只會購買位於城市a的商品。

2、資料不存在雜訊,即測試資料都是合法的。

包含多組資料

每組輸入資料格式如下:

第一行,三個數:n、m、q,表示n個商品,m條購買行為資料,q個詢問。

接下來n行,每行兩個數:itemid、cityid,表示商家填寫的服務itemid,位於城市cityid。

接下來m行,每行三個數:userid、itemid、cityid,表示使用者userid購買了服務itemid,移動端定位城市cityid。

接下來q行,每行兩個數:0、itemid或者1、userid,表示詢問服務itemid所在的城市,或者使用者userid所在的城市。

注意:0表示位置資訊缺失。

每組輸出資料格式如下: q行,每行乙個數:cityid,表示服務itemid位於cityid,或者使用者userid位於cityid。

3 2 5

2 03 0

1 32 2 2

1 1 0

0 10 2

0 31 1

1 23 2 0 3 2

1<=n<=limit

1<=m<=limit

1<=q<= n+m

1<=itemid<=n

1<=userid<=m

0<=cityid<=n+m,0表示位置資訊缺失

對於60%的資料,limit<=10^2;對於100%的資料,limit<=10^5

#define _crt_secure_no_warnings#include 

#include

#include

using

namespace

std;

/*一開始採用簡單對映發現事情沒那麼簡單,因為這個對應的user和item不是一對一對映而是多對多

思路:種類並查集,將具有關聯user和item對映在乙個集合中

*/const

int limit = 2e5 + 10

;int

set[limit]; //

表示user和item的並查集 因為有倆種類別不能重複於是用n+i對映表示user i表示item

intcity[limit]; //

city[i]表示祖先節點為i對應的城市id

//尋找祖先 並路徑壓縮

int find(int

a)//

聯合void united(int a, int

b)

else

}int

main()

for (int i = 1; i <= n; i++)

}while (m--)

}while (q--)

cityid =city[find(id)];

printf(

"%d\n

", cityid);}}

}

2 19 找出主要元素

大小為 n 的陣列 a,其主要元素是乙個出現次數超過n 2 的元素 從而這樣的元素最多有乙個 例如,陣列 3,3,4,2,4,4,2,4,4 有乙個主要元素,而陣列 3 3,4 2,4 4,2 4沒有主要元素。如果沒有主要元素,那麼你的程式應該指出來。下面是求解該問題的乙個演算法概要。首先找出主要元...

(2 19)資料結構

性質 兒子的值一定不小於父親的值,樹的結構是從上到下,從左到右緊湊排列的。插入數值 先在末尾插入該數值,然後不斷向上提公升直到沒有大小顛倒為止。刪除最小值 首先把堆的最後乙個節點的數值複製到根節點上,並且刪除最後乙個節點。然後不斷向下交換直到沒有大小顛倒為止。在向下交換的過程中,如果有2個兒子,那麼...

試題解析2 19

試題解析 t1 簡化題意 乙個序列是優美的當且僅當可以通過操作 將相鄰兩個數移動到序列任意位置 使序列不降 考慮怎麼使這個序列不降,考慮移動會造成的影響,逆序對 2 或者不變 那麼如果有偶數個,那麼一定優美,否則一定不優美 如果是偶數個,肯定能構造出一種方案使得逆序對減少到 0 奇數的話就肯定不可能...