[BZOJ2152]聪聪可可
2015-07-18 23:40
246 查看
原题地址
点分治.
AC code:
点分治.
AC code:
#include <cstdio> #include <vector> #include <algorithm> using namespace std; const int N=20010; const int INF=1<<28; int n,a,m,mins,root; int son ; int f [3]; bool del ; struct Data{ int v,w; Data(int v,int w):v(v),w(w) {} }; vector<Data> G ; void read(){ scanf("%d",&n); a=n; for(int i=1;i<n;i++){ int x,y,w; scanf("%d%d%d",&x,&y,&w); G[x].push_back(Data(y,w)); G[y].push_back(Data(x,w)); } } void DFS1(int pre,int p){ int maxs=-INF; son[p]=1; for(int i=0;i<G[p].size();i++){ Data q=G[p][i]; if(q.v==pre||del[q.v]) continue; DFS1(p,q.v); son[p]+=son[q.v]; maxs=max(maxs,son[q.v]); } maxs=max(maxs,m-son[p]); if(maxs<mins){ root=p; mins=maxs; } } void DFS2(int anc,int pre,int p,int w){ son[p]=1; f[anc][w%3]++; for(int i=0;i<G[p].size();i++){ Data q=G[p][i]; if(q.v==pre||del[q.v]) continue; DFS2(anc,p,q.v,(w+q.w)%3); son[p]+=son[q.v]; } } void work(int p,int tot){ int r; int sum[3]={0}; m=tot;mins=INF; DFS1(0,p); r=root; for(int i=0;i<G[r].size();i++){ Data q=G[r][i]; if(del[q.v]) continue; f[q.v][0]=f[q.v][1]=f[q.v][2]=0; DFS2(q.v,r,q.v,q.w%3); for(int i=0;i<=2;i++) sum[i]+=f[q.v][i]; } for(int i=0;i<G[r].size();i++){ Data q=G[r][i]; if(del[q.v]) continue; a+=f[q.v][0]*(sum[0]-f[q.v][0]); a+=f[q.v][1]*(sum[2]-f[q.v][2]); a+=f[q.v][2]*(sum[1]-f[q.v][1]); a+=(f[q.v][0]<<1); } del[r]=1; for(int i=0;i<G[r].size();i++){ Data q=G[r][i]; if(del[q.v]) continue; work(q.v,son[q.v]); } } int gcd(int x,int y){ return y?gcd(y,x%y):x; } int main(){ read(); work(1,n); int g=gcd(a,n*n); printf("%d/%d",a/g,n*n/g); return 0; }
相关文章推荐
- 配置DTcms伪静态功能图文教程
- PHP中如何通过Web执行C/C++应用程序?
- 命令模式 - 行为模式
- fork()+printf(/n)或printf()的区别?
- 2015071804 - 经历多了是否可以淡然面对呢?
- RTMP流媒体入门
- HDU 5280 Senior's Array
- 【理解】如何在内存中篡改数据
- plc和嵌入式的区别
- jq和thinkphp经常使用的几种ajax
- [BZOJ1187][HNOI2007]神奇游乐园
- poj 3084 dinic最大流
- 支持按行号区域文本选择的NotePad++插件开发
- 《STL源码剖析》空间配置器
- 2015071803 - 番石榴园下的喧嚣
- webqq协议请求交互过程
- 游戏编程与游戏种类
- Python应用phy模块生成html表格
- android打包准备:混淆第三方jar包(Gson, greenDao,sharesdk,UIL,高德地图, unity,pinyin4j,async http,JPush,EventBus等)
- KNN算法(一)---opencv实现