2019.2.14 t3 车辆销售

news/2024/7/4 8:25:06

  • 用算法求最大生成树,在并查集合并时,把原本的一个根连向另一个 根改成两个根都连向一个新建的节点,并把当前正在处理的边的权值赋给这个新 节点做点权。这样形成的结构会是一棵树。 一个点的答案大致上是树的根到自己的路径上,相邻两个节点的子树叶节点 数的平方和。需要注意的是父子两个节点权值相同的情况,这个部分需要特殊处理。
 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


http://www.niftyadmin.cn/n/1112753.html

相关文章

[网络流24题]餐巾(cogs 461)

【问题描述】 一个餐厅在相继的N天里&#xff0c;第i天需要Ri块餐巾(il&#xff0c;2&#xff0c;…&#xff0c;N)。餐厅可以从三种途径获得餐巾。 (1)购买新的餐巾&#xff0c;每块需p分&#xff1b; (2)把用过的餐巾送到快洗部&#xff0c;洗一块需m天&#xff0c;费用需f分…

人工智能深度学习Caffe框架介绍,优秀的深度学习架构

在深度学习领域&#xff0c;Caffe框架是人们无法绕过的一座山。这不仅是因为它无论在结构、性能上&#xff0c;还是在代码质量上&#xff0c;都称得上一款十分出色的开源框架。更重要的是&#xff0c;它将深度学习的每一个细节都原原本本地展现出来&#xff0c;大大降低了人们学…

Kotlin——中级篇(七):抽象类(abstract)、内部类(嵌套类)详解

在前面几个章节中&#xff0c;详细的介绍了Kotlin类的类别中的数据类、密封类、接口类以及枚举类。在这个章节中会对Koltin的抽象类和内部类作出一个详细的讲解。如果对上面所提到的类的类别还不是很清晰的&#xff0c;请阅读我的前几篇文章。Kotlin——中级篇&#xff08;六&a…

Linux系统的字型设定方法(转)

Linux系统的字型设定方法(转)[more]  这次我们来讲解如何调整各式各样的字型设定&#xff0c;如何安装新字体&#xff0c;和其他可以大大改善Xwindow字型的外观和可读性的方法。这是藉由调整XF86Config文件中的字型路径(FontPath)&#xff0c;在startx或xdm加上Xserver命令列…

奔跑中的2015——每益添(运维成长)

------我有想奔跑的冲动&#xff0c;有你在跌倒也从容。------无所畏惧的去追梦&#xff0c;汗水书写这份光荣。------每一个小人物也拥有小的梦&#xff0c;------我只想和你牵着手在雨中等彩虹。2015注定是不平凡的一年&#xff0c;这一年我离职&#xff0c;我抉择&#xff0…

parcel初体验

最近需要做一个纯静态网站&#xff0c;因工作量比较少&#xff0c;功能又不复杂&#xff0c;上 webpack 觉得太麻烦了&#xff0c;加上早就对 parcel 种草&#xff0c;所以这次决定试用一下号称零配置的 parcel 。 上手 根据官网文档很快就安装好了。值得点赞的是&#xff0c;在…

Oracle存储过程(转)

存储过程创建语法&#xff1a; create or replace procedure 存储过程名&#xff08;param1 in type&#xff0c;param2 out type&#xff09; as 变量1 类型&#xff08;值范围&#xff09;; 变量2 类型&#xff08;值范围&#xff09;; Begin Select count(*) into 变量1 fro…

用C语言编写Linux实用程序的艺术(转)

用C语言编写Linux实用程序的艺术(转)[more]  Linux 和其他类 UNIX 系统总是附带了大量的工具&#xff0c;它们执行从显而易见的到不可思议的广泛功能。类 UNIX 编程环境的成功很大程度上归功于工具的高品质和选择&#xff0c;以及这些工具之间相互衔接的简易性。作为开发人员…