hdu5102 bfs
2015-08-04 20:21
232 查看
一棵树上前k个两点间最短路的距离和
#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> #include<cmath> #include<map> #include<queue> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1 | 1 #define lowbit(x) x&(-x) using namespace std; const int N=1e5+10; long long INF=-1e15; const int MOD=1e9+7; int T,n,m,k,x,y,z,l,tot,cnt; long long ans; struct node{ int u,v,d; node(int _u,int _v,int _d):u(_u),v(_v),d(_d){} node(){} }; struct Edge{ int v,next; }edge[N*20]; int head ; void addedge(int u,int v){ edge[tot].v=v; edge[tot].next=head[u]; head[u]=tot++; } queue<node> q; void bfs(){ while(!q.empty()){ node now=q.front();q.pop(); int u=now.u,v=now.v,d=now.d; for(int i=head[v];~i;i=edge[i].next){ int to=edge[i].v; if(to==u) continue; cnt++; ans+=d+1; q.push(node(v,to,d+1)); if(cnt>=k) break; } if(cnt>=k) break; } } int main() { #ifndef ONLINE_JUDGE freopen("aaa","r",stdin); #endif int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); memset(head,-1,sizeof head); tot=0; for(int i=1;i<n;i++){ int u,v; scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } while(!q.empty()) q.pop(); for(int i=1;i<=n;i++) q.push(node(i,i,0)); cnt=0; ans=0; k*=2; bfs(); printf("%I64d\n",ans/2); } return 0; }
相关文章推荐
- hdu4533 威威猫系列故事——晒被子
- HDU 2546 饭卡
- redis简易安装
- hbase读取过程
- 【linux高级程序设计】(第十四章)TCP高级应用 3
- E2BAF1CC
- hdu 5078 Osu!
- Html5实例之婚庆界面
- Struts2学习心得——传参
- Triangle
- POJ 3468 线段树区间更新求和模板
- udev绑定ASM磁盘组
- Lua学习笔记(一):搭建开发环境
- 科技世界患上“恐美症”?
- HDOJ Avoid The Lakes (DFS)
- 旅行
- 古朴原装232转TTL,232转针,带 5V电源电路板,纯手工打造,全球仅此一套
- Lotto POJ2245【全排列问题】
- 2015 多校赛 第一场 1007 (hdu 5294)
- [MetaHook] Load large texture from model