2019.2.14 t3 车辆销售
- 用算法求最大生成树,在并查集合并时,把原本的一个根连向另一个 根改成两个根都连向一个新建的节点,并把当前正在处理的边的权值赋给这个新 节点做点权。这样形成的结构会是一棵树。 一个点的答案大致上是树的根到自己的路径上,相邻两个节点的子树叶节点 数的平方和。需要注意的是父子两个节点权值相同的情况,这个部分需要特殊处理。
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #include <cmath> 6 #include <cctype> 7 using namespace std; 8 9 #define LL long long 10 #define res register int 11 inline int read() 12 { 13 int x(0),f(1); char ch; 14 while(!isdigit(ch=getchar())) if(ch=='-') f=-1; 15 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar(); 16 return f*x; 17 } 18 int n,m; 19 const int N=500000+5; 20 int head[N],nxt[N<<1],ver[N<<1],tot; 21 struct E{ 22 int u,v,w; 23 }e[N]; 24 int vis[N],fa[N]; 25 LL w[N],size[N],val[N]; 26 inline bool cmp(E a,E b) {return a.w>b.w;} 27 inline void add(int x,int y) { 28 ver[++tot]=y; nxt[tot]=head[x]; head[x]=tot; 29 ver[++tot]=x; nxt[tot]=head[y]; head[y]=tot; 30 } 31 32 inline int get(int x) { 33 if(x==fa[x]) return x; return fa[x]=get(fa[x]); 34 } 35 36 int cnt(0); 37 inline void Kruskal() 38 { 39 cnt=n; 40 sort(e+1,e+m+1,cmp); 41 for(res i=1 ; i<=n ; i++) fa[i]=i; 42 for(res i=1 ; i<=m ; i++) 43 { 44 int x=get(e[i].u),y=get(e[i].v),z=e[i].w; 45 if(x==y) continue; 46 val[++cnt]=z; 47 fa[cnt]=fa[x]=fa[y]=cnt; 48 add(x,cnt); add(y,cnt); 49 if(cnt==2*n-1) break; 50 } 51 } 52 53 inline void dfs(int x,int f) 54 { 55 vis[x]=1; 56 for(res i(head[x]) ; i ; i=nxt[i]) 57 { 58 int y=ver[i]; if(f==y) continue; 59 dfs(y,x); size[x]+=size[y]; 60 } 61 } 62 63 inline void dp(int x,int f) 64 { 65 for(res i(head[x]) ; i ; i=nxt[i]) 66 { 67 int y=ver[i]; if(f==y) continue; 68 if(val[x]==val[y]) size[y]=size[x]; 69 w[y]=w[x]+(size[x]-size[y])*(size[x]-size[y]); 70 dp(y,x); 71 } 72 } 73 74 inline void work() 75 { 76 for(res i=1 ; i<=n ; i++) size[i]=1; 77 for(res i=1 ; i<=cnt ; i++) 78 { 79 if(vis[i]) continue; 80 int x=get(i); 81 dfs(x,0); 82 dp(x,0); 83 } 84 } 85 86 int main() 87 { 88 freopen("car.in","r",stdin); 89 freopen("car.out","w",stdout); 90 n=read(); m=read()-1; 91 for(res i=1 ; i<=m ; i++) { 92 e[i].u=read(); e[i].v=read(); e[i].w=read(); 93 } 94 Kruskal(); 95 work(); 96 for(res i=1 ; i<=n ; i++) cout<<w[i]<<" ";//printf("%d ",w[i]); 97 puts(""); 98 return 0; 99 }
View Code
转载于:https://www.cnblogs.com/wmq12138/p/10380846.html
2019.2.14 t3 车辆销售相关推荐
- 训练日志 2019.1.14
训练第一天,收获还是比较大的. 下午比赛 A 题是不互素的中国剩余定理模板题,把之前的模版拿过来贴上直接 WA,发现输入的除数与余数正好跟模版反了,改了又 WA 一次,心态崩了,跟 sdz 要的模版, ...
- this.scrollheight获取textarea的高度是0_【2019年14卷3期】UHF传感器固定角度和加装屏蔽罩对有效高度的影响丨电气工程学报文章推荐...
点击上方关注点击下方点赞 气体绝缘组合电器(Gas insulated switchgear,GIS)因体积小.运行稳定等优点而被广泛用在110 kV及以上变电站中,设备运行过程中的局部放电故障可能会 ...
- 18天精读掌握《费曼物理学讲义卷一》 第3天 2019.6.14
18天精读掌握<费曼物理学讲义卷一> 第3天 2019/6/14 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成果 3. 今日时间表 4.Atimelogge ...
- 日常(更新至2019.8.14)
八月 Camp完之后就开始HDU多校自闭之旅了 第一场连签到题都是网络流这种级别的orz 因为这几场比赛 强行学习了线性基.划分树.支配树和一些奇奇怪怪的可持久化数据结构 算是颇有收获了 还有两场,坚 ...
- 第二次会议(2019/03/14)
一.会议时间 2019年3月14日星期四 二.会议地点 逸夫楼C424 三.参与人员 Triple兔小组全体成员 四.会议内容 1.小组成员分别对自己的学习进度进行汇报 2.分析问卷调查结果 3.分配 ...
- 2019.12.14
2019.12.14 bool canBeEqual(vector<int>& target, vector<int>& arr) {if (target.si ...
- 《惢客创业日记》2019.10.14 销售的出路在哪里?
今天,看到了一则新闻,就是电信运营商开始打击骚扰电话,还专门上了一套"防骚扰"系统.关注这条新闻,也是想为了学习一下,看看有没有针对防骚扰现象的创新. 在网上查了一下,有一个简单的 ...
- MapReduce项目案例4——乘用车辆和商用车辆销售数据分析
项目介绍 1.数据概况 本数据为上牌汽车的销售数据,分为乘用车辆和商用车辆 数据包含销售相关数据与汽车具体参数 2.数据项包括 省0,月1,市2,区县3,年4,车辆型号5,制造商6,品牌7,车辆类型8 ...
- 小组会谈(2019.3.14)
一:会议主题 1.确定项目的立题 2.讨论需要实现的功能 3.确定小组成员之间的分工和完成各自任务的期限 二:会议地点 逸夫楼C座一楼 三:会议时间 2018年3月14日10:00--11:20 四: ...
最新文章
- vc6.0 记录一些常见问题的解决方案
- vins中imu融合_双目版 VINS 项目发布,小觅双目摄像头作为双目惯导相机被推荐...
- CreateProcess返回错误998
- 只允许特定的组用户su切换到root
- html引用c 变量,Y.A.K.E
- nginx开机自启动
- 基于序列标注的信息抽取模型(已申请专利)
- 利用计算机传播非法信息,非法侵入计算机信息系统罪如何处罚
- 在计算机上采用线性同余法,随机数生成算法 —— 线性同余法
- txt文件的编码结构
- 网络基础---NAT穿越技术
- 如何在Hexo中对文章md文件分类
- MTI姿态传感器学习笔记
- 我经历过的失败产品和项目(二):一款无疾而终的棋牌类游戏
- wincc7.4安装授权 全(文件分享)
- 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
- 项目管理学习总结(15)——技术负责人所需的四个核心能力
- jQuery超详细入门教程
- 关于更新Windows11后eNSP路由器启动不了一直报“‘错误代码:40”的问题
- 不是为了赢,只是不想输