日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1034 Head of a Gang (30 分) 【难度: 中 / 知识点: 并查集】

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1034 Head of a Gang (30 分) 【难度: 中 / 知识点: 并查集】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


https://pintia.cn/problem-sets/994805342720868352/problems/994805456881434624
首先不難想到的是并查集,不過這里有一個關(guān)鍵的一點就是是字符串不是數(shù)字。
所以可以用哈希表來將字符串和數(shù)字編號來一一對應的映射起來。
其它的就是基本的并查集即可。

#include<bits/stdc++.h> using namespace std; const int N=1e4+10; struct node {string name;int cnt; }Node; bool cmp(node a,node b) {return a.name<b.name;} vector<node>ans;//答案 int p[N],cnt[N],sum[N],val[N],idx=1;//sum就是一個集合總的值,val是每一個人單獨的值 int n,k; unordered_map<string,int>hush1;//字符串到編號的映射 unordered_map<int,string>hush2;//編號到字符串的映射 unordered_map<int,vector<int>>mp;//每一個集合 int find(int x) {if(x!=p[x]) p[x]=find(p[x]);return p[x]; } int main(void) {cin>>n>>k;for(int i=1;i<=n;i++) p[i]=i,cnt[i]=1;for(int i=1;i<=n;i++){string a,b;int t; cin>>a>>b>>t;if(!hush1.count(a)) hush1[a]=idx++;//映射成唯一的編號hush2[hush1[a]]=a;if(!hush1.count(b)) hush1[b]=idx++;hush2[hush1[b]]=b;if(find(hush1[a])!=find(hush1[b]))//不再同一個集合{cnt[find(hush1[b])]+=cnt[find(hush1[a])];sum[find(hush1[b])]+=sum[find(hush1[a])]+t;val[hush1[a]]+=t;val[hush1[b]]+=t;p[find(hush1[a])]=find(hush1[b]);}else //在同一個集合{val[hush1[a]]+=t;val[hush1[b]]+=t;sum[find(hush1[b])]+=t;}}for(int i=1;i<=n;i++) mp[find(i)].push_back(i);//將其每一個值都存到對應的集合里for(auto i=mp.begin();i!=mp.end();i++)//枚舉所有的集合{auto temp=i->second;if(temp.size()<3) continue;//人數(shù)不夠if(sum[i->first]<=k) continue;//總分不夠int index=0;for(int j=0;j<temp.size();j++)//找到集合中個人分最大的值{if(val[temp[j]]>val[temp[index]]) index=j;}Node.name=hush2[temp[index]];Node.cnt=temp.size();ans.push_back(Node);}cout<<ans.size()<<endl;sort(ans.begin(),ans.end(),cmp);for(int i=0;i<ans.size();i++) cout<<ans[i].name<<" "<<ans[i].cnt<<endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的1034 Head of a Gang (30 分) 【难度: 中 / 知识点: 并查集】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。