bzoj2395: [Balkan 2011]Timeismoney 最小乘积生成树
2016-01-04 20:16
369 查看
这一题很好 。。 数形结合
看题解。。。。
http://www.cnblogs.com/autsky-jadek/p/3959446.html
只能%
代码:
看题解。。。。
http://www.cnblogs.com/autsky-jadek/p/3959446.html
只能%
代码:
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; char c; #define ll long long inline void read(ll &a) { a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); } ll n,m; ll f[201]; ll find_f(ll x){return f[x]==x?x:find_f(f[x]);} inline void Begin_Union(){for(ll i=1;i<=n;i++)f[i]=i;} inline void Union(ll x,ll y){f[find_f(x)]=find_f(y);} struct Point { ll x, y; inline friend ll operator *(Point a,Point b){return a.x*b.y-a.y*b.x;} inline friend Point operator -(Point a,Point b){return (Point){a.x-b.x,a.y-b.y} ; } }; struct Edge { ll x,y; ll u,v,w; inline friend bool operator <(Edge a,Edge b){return a.w<b.w;} inline void change_w_x(){w=x;} inline void change_w_y(){w=y;} inline void change(Point a,Point b) {w=y*(b.x-a.x)+(a.y-b.y)*x;} }; Edge Hi[10001]; inline Point MST() { Point res; ll i,j=0; res.x=res.y=0; Edge now; Begin_Union(); sort(Hi+1,Hi+1+m); for(i=1;i<n;i++) { do now=Hi[++j]; while(find_f(now.v)==find_f(now.u)); Union(now.v,now.u); res.x+=now.x;res.y+=now.y; } return res; } //ll ans=1<<29; Point aa; void Div(Point a,Point b) { for(ll i=1;i<=m;i++) Hi[i].change(a,b); Point c=MST(); if(aa.x*aa.y>c.x*c.y||(aa.x*aa.y==c.x*c.y&&c.x<aa.x))aa=c; if((c-a)*(b-a)<=0)return ; Div(a,c); Div(c,b); } int main() { read(n),read(m); for(ll i=1;i<=m;i++) read(Hi[i].u),Hi[i].u++,read(Hi[i].v),Hi[i].v++,read(Hi[i].x),read(Hi[i].y); for(ll i=1;i<=m;i++) Hi[i].change_w_x(); Point r=MST(); aa=r; for(ll i=1;i<=m;i++) Hi[i].change_w_y(); Point l=MST(); if(aa.x*aa.y>l.x*l.y||(aa.x*aa.y==l.x*l.y&&l.x<aa.x))aa=l; Div(r,l); printf("%d ",aa.x); printf("%d\n",aa.y); return 0; }
相关文章推荐
- [转载]mac下homebrew的使用
- 利用linux BT5来破解无线 破解无线
- 日历插件FullCalendar应用:(二)数据增删改
- Node.js建站2-Express MVC模式理解与项目结构
- ios Label常用方法
- 通过正则表达式提取HTML正文(java实现)
- Java数据类型和MySql数据类型对应表
- 程序猿学英语——In September the English learning summary
- iOS 扫描二维码
- 项目总结
- C/C++日期时间处理
- IT纪元---- VR 时代
- iOS 数据库升级策略
- 表单数据相关
- 产品经理如何解决协同部门矛盾?
- vim编辑器常用指令
- tyvj 跑路
- hadoop 运行mahout 问题小结(二)
- JAVA多线程机制之同步与互斥
- 动态修改背景图片的颜色