1234: ZJTZYRC篩offer 時間限制: 5 Sec 記憶體限制: 128 MB
提交: 40 解決: 10
標籤 提交 統計 討論版
題目描述
ZJTZYRC同學作為牛頭沖最強就業戰鬥力,每天都會收到大量offer。 有一天ZJTZYRC同學決定篩選一下offer,就像hr篩簡曆一樣。 首先,ZJTZYRC同學把所有offer進行了一次排名,依次從1到n。 接著,ZJTZYRC同學根據各方面資訊,把某兩個offer同歸為兩者之中較高的排名。如果某個offer有相同排名的其他offer,那麼其他offer也會被歸入較高的排名。 注意該操作不會導致其餘offer排名變動。 偶爾,ZJTZYRC同學會想知道某個offer究竟被他排名到哪兒去了,偶爾也會想要知道,當前還剩下多少個排名等級。 偶爾,ZJTZYRC同學會腦袋抽風,把兩個相同等級的公司合并,此時無視該操作就行。 輸入
第一行一個n,表示有多少家公司的offer。 接下來n行,每行一個公司名稱,表示ZJTZYRC收到了這家公司的offer。保證公司名稱是唯一的。公司名稱的順序對應它的初始排名(1~n) 第n+1行一個數字m,表示ZJTZYRC同學進行了總共幾次操作。 接下來m行,每行表示一個操作。操作描述如下: "a 公司名a 公司名b":ZJTZYRC把這兩家公司合并。 "q 公司名":ZJTZYRC想要知道這家公司當前的排名。 "t":ZJTZYRC希望知道當前還有多少個排名等級 我們保證n<=10000,m<=20000,公司名稱是一串大寫字母開頭的英文字元(不包含任何空格在內的特殊字元) 輸出
對於每個q操作,輸出一行包含一個整數表示這家公司當前的排名。 對於每個t操作,輸出一行包含一個整數表示當前還有多少個排名等級。 範例輸入 5TencentHuaweiShanbeiBaiduAli7ta Baidu Huaweia Shanbei Alia Baidu Aliq Tencentq Baidut 範例輸出 5122 提交 統計 討論版
並查集與map聯用,比賽的時候腦子抽了......
#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef long double LD;const double pi = acos(-1.0);/////////////////////////////// int par[10008];map<string, int>M; int find(int u) { if (u == par[u]) { return u; } else { return par[u] = find(par[u]); }} void aunion (int a, int b) { int x = find(a); int y = find(b); if (x<y) { par[y] = x; } else{ par[x] = y; }} ///////////////////////////////int main(int argc, char**argv) { //ios_base::sync_with_stdio(0); cin.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); //////////////////////////// int n, m; cin >> n; for (int i = 1; i <= n; i++) { string in; cin >> in; M[in] = i; } cin >> m; for (int i = 1; i <= n; i++) { par[i] = i; } while (m--) { char sw[3]; scanf("%s",sw); if (sw[0] == 't') { int ans = 0; for (int i = 1; i <= n; i++) { if (find(i) == i) { ans++; } } printf("%d\n",ans); } if (sw[0] == 'a') { string fr; string se; cin >> fr >> se; int u = M[fr]; int v = M[se]; aunion(u, v); } if (sw[0] == 'q') { string in; cin >> in; int u = M[in]; int ans = find(u); printf("%d\n",ans); } } //////////////////////////// //system("pause"); return 0; }//END /************************************************************** Problem: 1234 User: 2015217298 Language: C++ Result: 正確 Time:4469 ms Memory:2608 kb****************************************************************/