浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking
并查集的使用时注意:
1. 合并两个结点是 F[sa] = sb 而不是 sb = F[sa],想一下含义。
2. 给每个结点赋予其自身为父节点时,要先判断它的父节点是不是0,也许已经有了。
我把照片里其他同学的成绩赋值为0,但是应该考虑到这张照片的配角也许是另外一张照片的主角,也就是该同学其实有成绩,所以只有在他的已有成绩不存在的情况下才能赋值为0。
AC代码
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>using namespace std;const int maxn = 10010;int F[maxn] = {0};int findS(int x){int a = x;while(x!=F[x]){x = F[x];}while(a!=F[a]){int z = a;F[z] = x;a = F[a];}return x;
}void unite(int a,int b){int sa = findS(a);int sb = findS(b);if(sa!=sb)F[sa] = sb;//注意点1 return;
}map<int,int> idToG;struct univ{priority_queue<int,vector<int>,greater<int> > Q;int sum = 0;
};map<int,univ> idToU;vector<univ> vi;bool cmp(univ a,univ b){if(a.sum!=b.sum)return a.sum>b.sum;else if(a.Q.size()!=b.Q.size())return a.Q.size()<b.Q.size();else return a.Q.top()<b.Q.top();
}int main(){ int pN;//photo numbercin>>pN;while(pN--){int id,num,id2,grade;cin>>id>>num;if(F[id] == 0)F[id] = id;//注意点2 while(num--){cin>>id2;if(F[id2] == 0)F[id2] = id2;if(!idToG[id2])idToG[id2] = 0;//注意点3 unite(id,id2);}cin>>grade;idToG[id] = grade;}for(map<int,int>::iterator it = idToG.begin();it!=idToG.end();it++){int id = it->first;int grade = it->second;int root = findS(id);idToU[root].Q.push(id);idToU[root].sum += grade;}for(map<int,univ>::iterator it = idToU.begin();it!=idToU.end();it++){vi.push_back(it->second);}sort(vi.begin(),vi.end(),cmp);printf("%d\n",vi.size());for(int i=0;i<vi.size();i++){printf("%04d %d %d\n",vi[i].Q.top(),vi[i].Q.size(),vi[i].sum);}return 0;
}
浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking相关推荐
- 浙江大学软件学院2020年保研上机模拟练习 7-4 Shopping With Coupons
目录 解题思路演进过程 第一次程序 第二次程序 第三次程序 解题思路演进过程 首先是题目的理解上:有n个商品,n张优惠券,实际上能买的商品个数最多就是n*n,为啥呢,这题默认是买一个商品必须用一张券, ...
- 浙江大学软件学院2020年保研上机模拟练习
浙江大学软件学院2020年保研上机模拟练习 7-1.Standard Form of Polynomial (20分) 7-2.Distance of Triples (25分) 7-3. Parti ...
- 浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples
思路一: 3个数组都按照小到大排序,设置3个指针,起始都在数组的末尾,如果1个指针向前移动1位可以让对应元素和另两个数组元素的距离之和减小,则移动它.如果某一回合三个指针都没动,就跳出循环. 非满分: ...
- 浙江大学软件学院2020年保研上机真题练习
用浏览器打开html文件即可,需要源文件私聊
- 浙江大学计算机与软件学院2019年保研上机模拟练习 --- 凌宸1642
浙江大学计算机与软件学院2019年保研上机模拟练习 - 凌宸1642 7-1 Happy Numbers (20 分) - 简单数学 A happy number is defined by the ...
- 浙江大学软件学院2020年保研真题Distance of Triples (25 分)
时间限制:300 ms 内存限制:64 MB The distance of triples (三元组) (a,b,c) is defined as D(a,b,c)=∣a−b∣+∣b−c∣+∣c−a ...
- 浙江大学计算机学院保研率,浙江大学2020届保研率25.9%,主要保研本校、复旦、交大、北大...
原标题:浙江大学2020届保研率25.9%,主要保研本校.复旦.交大.北大 推免大户是医学院.计算机.电工.信息学院等. 1.推免比例 根据浙江大学本科生院<浙江大学推荐2020年免试研究生公示 ...
- 2020计算机保研经历
本文章未经本人允许,不得私自转载! 打个小广告: 我的 Github :https://github.com/WilliamWuLH 不定期更新 LeetCode 刷题 和 各种学习笔记.欢迎 ⭐St ...
- 东北大学计算机保研每年多少清华,东北大学2020届保研率13%,主要保研本校、天大、国科大、华东、东南大学...
根据<东北大学关于做好2020年推荐优秀应届本科毕业生免试攻读研究生工作的通知><2020年推免生名单公示>: 2020年东北大学推免生共计963人. 其中普通名额926人,辅 ...
最新文章
- Ubuntu实时监测系统性能工具
- linux中ctrl+z和ctrl+c的区别
- Android 自定义环形圆形显示统计数据z
- 第七章 比高斯更快的计算
- 【codevs2039】骑马修栅栏,欧拉回路
- 【LeetCode】剑指 Offer 19. 正则表达式匹配
- Linux timeout命令的使用:timeout - run a command with a time limit
- Linux系统安全之pam后门安装使用详解
- Cadence OrCAD Capture 设计准备图文教程
- 网络安全实验4 SQL注入攻击
- Ubuntu安装vmPlayer
- 给定经纬度计算距离_根据两点经纬度计算距离
- 自然语言在公路交通各建设阶段运用
- LeetCode 刷题: Fizz Buzz
- Metro 风格页面设计
- Shell 千分 逗号隔开
- 苹果手机相册怎么分类_电子相册怎么做?用手机app可以剪辑电子相册视频吗?...
- 《Python神经网络编程(Make Your Own Neural Network)》读书笔记
- 简单地获得UTM坐标系
- xmodem,ymodem,zmodem,kermit的主要区别