2599: [IOI2011]Race|树的点分治
来源:互联网 发布:linux连不通数据库端口 编辑:程序博客网 时间:2024/04/30 16:20
数据范围:
然后就是分治,找经过根的路径开数组存下距离为
点的编号从零开始!!!!(sb不好好看题WA了那么多发还好意思说QAQ
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorithm>#define N 400022#define M 1000002using namespace std;int sc(){ int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}int vis[N],size[N],mx[N],dis[N];int head[N],nxt[N],lst[N],v[N];int cnt[M],n,K,sum,root,tot,ans,top,pre;pair<int,int> w[N];void insert(int x,int y,int z){ lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;v[tot]=z; lst[++tot]=x;nxt[tot]=head[y];head[y]=tot;v[tot]=z;}void get_root(int x,int f){ size[x]=1;mx[x]=0; for(int i=head[x];i;i=nxt[i]) if(lst[i]!=f&&!vis[lst[i]]) { get_root(lst[i],x); size[x]+=size[lst[i]]; mx[x]=max(mx[x],size[lst[i]]); } mx[x]=max(mx[x],sum-size[x]); if(mx[x]<mx[root])root=x;}void dfs(int x,int f,int step,int dis){ if(dis>K)return ; ans=min(ans,step+cnt[K-dis]); w[++top]=make_pair(dis,step++); for(int i=head[x];i;i=nxt[i]) if(lst[i]!=f&&!vis[lst[i]]) dfs(lst[i],x,step,dis+v[i]);}void solve(int x){ top=0,pre=1; for(int i=head[x];i;i=nxt[i]) if(!vis[lst[i]]) { dfs(lst[i],x,1,v[i]); for(int j=pre;j<=top;j++) cnt[w[j].first]=min(cnt[w[j].first],w[j].second); pre=top+1; } vis[x]=1; for(int i=1;i<=top;i++) cnt[w[i].first]=1e9;cnt[0]=0; for(int i=head[x];i;i=nxt[i]) if(!vis[lst[i]]) { sum=size[lst[i]];root=0; get_root(lst[i],0); solve(root); }}int main(){ mx[0]=M; n=sc(),K=sc(); for(int i=1;i<n;i++) { int x=sc()+1,y=sc()+1,z=sc(); insert(x,y,z); } for(int i=1;i<=K;i++)cnt[i]=1e9; ans=1e9; sum=n,root=0; get_root(1,0); solve(root); cout<<(ans>n?-1:ans); return 0;}
0 0
- 2599: [IOI2011]Race|树的点分治
- Bzoj2599:[IOI2011]Race:树的点分治
- BZOJ 2599 IOI2011 Race 树的点分治
- 【BZOJ 2599】 [IOI2011]Race 树的点分治
- bzoj 2599: [IOI2011]Race(树的点分治)
- 2599: [IOI2011]Race 点分治
- [树的点分治] [树形DP] [BZOJ2599] [IOI2011] Race
- BZOJ 2599 [IOI2011]Race【Tree,点分治】
- 【点分治】BZOJ 2599:[IOI2011]Race
- bzoj 2599: [IOI2011]Race (点分治)
- Bzoj 2599: [IOI2011]Race(点分治)
- 点分治[BZOJ]2599: [IOI2011]Race
- 【BZOJ】2599 [IOI2011]Race 点分治
- BZOJ 2599: [IOI2011]Race 点分治题解
- bzoj 2599: [IOI2011]Race 点分治
- 【bzoj2559】【IOI2011】【Race】【点分治】
- BZOJ_P2599 [IOI2011]Race(点分治)
- 【bzoj2599】[IOI2011]Race 点分治
- Eclipse java工程中配置opencv
- 蓝桥杯 算法提高 排列数
- RedHat6.5 安装Oracle 12c RAC
- JDK 6 目录结构介绍以及JDK中的工具研究
- B-tree B+tree
- 2599: [IOI2011]Race|树的点分治
- Kruskal算法求MST(最小生成树)
- CMS(新闻发布系统)存放新闻表内容的字段是text,数据过多无法插入,解决办法!
- 信息检索Information Retrieval评价指标
- XML语法以及应用
- leetcode:Median of Two Sorted Arrays
- 01.android设置应用开机启动
- Httpservletrequest.getParameter()和Httpservletrequest.getAttribute()区别
- 左值右值