小Y的问题
来源:互联网 发布:多线程编程 java 编辑:程序博客网 时间:2024/04/29 02:40
30分做法:n^4枚举边.
100分做法:
枚举每一条边,设两个端点为x,y;
我们通过组合公式来计算 Y 的个数,每一次加上C(num[x]-1)*(num[y]-1);
通过记连接一个点的边的最大值,次大值,第三大值。
加上除去枚举的边外x连接的最大的两条边,以及y连接的除去… 之后最大的边。
然后再将x和y换过来,重复一遍。
重复上述操作。
#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#define LL long longusing namespace std;int n;LL maxn,ans;struct H{ LL m1,m2,m3; int t1,t2,t3;}a[200009];//点 struct HH{ LL x,y,l;}b[200009];//边 LL cnt,num[200009];void ex(int x,int y,int z){ if(z>=a[x].m1) { a[x].m3=a[x].m2; a[x].m2=a[x].m1; a[x].m1=z; a[x].t3=a[x].t2; a[x].t2=a[x].t1; a[x].t1=y; } else if(z>=a[x].m2) { a[x].t3=a[x].t2; a[x].t2=y; a[x].m3=a[x].m2; a[x].m2=z; } else if(z>a[x].m3) { a[x].t3=y; a[x].m3=z; }}LL C(LL x)//从x个中任选2个 !一定要开LL {return x*(x-1)/2;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ a[i].m1=a[i].m2=a[i].m3=0; a[i].t1=a[i].t2=a[i].t3=i; } for(int i=1;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); b[++cnt]=((HH){x,y,z}); ex(x,y,z);ex(y,x,z); num[x]++;num[y]++; } for(int i=1;i<=cnt;i++) { int x=b[i].x,y=b[i].y; LL len=b[i].l; if(num[x]>=3&&num[y]>=2) { LL p=0; if(a[x].t1==y) p=a[x].m2+a[x].m3; else if(a[x].t2==y) p=a[x].m1+a[x].m3; else p=a[x].m1+a[x].m2; if(a[y].t1==x) p+=a[y].m2; else p+=a[y].m1; p+=len; maxn=max(p,maxn); ans+=C(num[x]-1)*(num[y]-1); } int tmp=x;x=y,y=tmp; if(num[x]>=3&&num[y]>=2) { LL p=0; if(a[x].t1==y) p=a[x].m2+a[x].m3; else if(a[x].t2==y) p=a[x].m1+a[x].m3; else p=a[x].m1+a[x].m2; if(a[y].t1==x) p+=a[y].m2; else p+=a[y].m1; p+=len; maxn=max(p,maxn); ans+=C(num[x]-1)*(num[y]-1); } } printf("%lld\n%lld",ans,maxn); return 0;}
阅读全文
1 0
- 小 Y 的问题
- 小Y的问题
- Tyvj 小Y的问题
- 小Y的难题
- 1007: 小Y的问题【TYVJ2016国庆赛D1T2】
- LibreOJ #6089 小Y的背包计数问题
- 思恋我的小y
- 小团队的技术管理 [Y]
- 小Y的智力游戏
- 小Y的绝对战争
- 小Y的数论题
- sqlserver的timestamp在类型转换y杜鳌这个问的一些小问题
- [背包DP][小技巧] LOJ#6089. 小 Y 的背包计数问题 && 51NOD 1597 有限背包计数问题
- 彪悍的小Y(图)
- 关于display的y一个小细节
- ssoj1065小Y的炮cannon
- 小Y的炮 cannon题解
- [51nod1479]小Y的数论题
- C文件拆分和合并 JNI中开启新线程
- 新手选择Linux桌面系统的7个对子
- 8.15 打包 2698
- SVN中的项目导入eclipse
- 10.方法重载,重写,继承
- 小Y的问题
- sdut 二分练习
- HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
- 练习 2017-08-15 文件的随机访问
- 拓展欧几里得 [Noi2002]Savage
- 集训第十六天(2017/8/15):树状数组
- LYOS —— Driver for Keyboard & Mouse
- 几种常用的传感器(加速度传感器、重力传感器、方向传感器、陀螺仪)简介
- 【ZJOI2008】骑士