Wannafly挑战赛1:A-Treepath(DFS或BFS)
来源:互联网 发布:java怎么用hadoop 编辑:程序博客网 时间:2024/05/17 03:08
Treepath
Problem Description
给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。
Input
第一行一个数n表示点的个数;
接下来n-1行,每行两个整数x,y表示边;
保证输入数据形成一棵树;
1<=n<=100000
Output
一行一个整数表示答案。
Sample Input
31 21 3
Sample Output
1
解题思路:
搜索,确定每层点的个数。要得到长度为偶数的路径,必须是从第奇数层到第奇数层,或偶数层到第偶数层,那么只要统计出偶数层的点个数和与奇数层点个数和,然后求
至于如何确定每层的点数,可以用DFS和BFS。
其实我一开始是想用DFS的,居然怕超时就写了个BFS,既然过了就懒得再改了。。。
Code:
#include <cstdio>#include <iostream>#include <queue>#include <cstring>using namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const int maxm=511111;const int maxn=111111;struct EdgeNode{ int to; int w; int next;};struct Node{ int x,step;};EdgeNode edges[maxm];int N,M;int head[maxn],edge;bool vis[maxn];int dep[maxn];//第i层的点的个数queue <Node> que;int maxstep=0;void addedge(int u,int v,int c){ edges[edge].w=c,edges[edge].to=v,edges[edge].next=head[u],head[u]=edge++;}void init(){ memset(head,-1,sizeof(head)); edge=0;}void BFS(){ while(!que.empty()) que.pop(); que.push(Node{1,1}); vis[1]=1; dep[1]++; while(!que.empty()) { Node u=que.front(); que.pop(); for(int i=head[u.x];i!=-1;i=edges[i].next) { int v=edges[i].to; if(vis[v]==0) { vis[v]=1; dep[u.step+1]++; que.push(Node{v,u.step+1}); maxstep=u.step+1; } } }}int main(){ int n; init(); scanf("%d",&n); for(int i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); addedge(x,y,1); addedge(y,x,1); } BFS(); LL odd=0,even=0; for(int i=1;i<=maxstep;i++) { if(i%2==0) odd+=dep[i]; else even+=dep[i]; } LL ans=odd*(odd-1)/2+even*(even-1)/2; printf("%lld\n",ans); return 0;}
DFS的代码:Wannafly挑战赛1 A.Treepath
阅读全文
0 0
- Wannafly挑战赛1:A-Treepath(DFS或BFS)
- Wannafly挑战赛1 A.Treepath(dfs)
- Wannafly挑战赛1 A.Treepath
- Wannafly挑战赛1 A Treepath
- Wannafly挑战赛1 A Treepath LCA
- Wannafly挑战赛1 Treepath
- Wannafly挑战赛1 Treepath(树形DP,思维)
- 【Wannafly挑战赛1】A Treepath 【树形DP】or 【黑白染色 找规律】
- Wannafly挑战赛1A-(树形DP)
- wannafly 1 treepath
- Wannafly挑战赛1 A-DP
- Wannafly挑战赛1 B Xorto(前缀异或和)
- Wannafly挑战赛1 Xorto(前缀异或+思维)
- Wannafly #1 Treepath(树形DP)
- Wannafly挑战赛6 A(二分)B(dfs)C(公式推导)E(技巧)
- Wannafly挑战赛3 A
- Wannafly挑战赛1B-(二分)
- Wannafly挑战赛1-C.MMset2(LCA)
- viewpager 小圆点
- HTML5权威指南笔记:9-组织内容
- 今日bug
- 动态链接库-Win32 DLL的说明
- 积分图快速计算
- Wannafly挑战赛1:A-Treepath(DFS或BFS)
- AngularJs 选择框排序+添加用户
- struts2.xml的特殊配置
- n个数中取最大值与最小值
- EL表达式和JSTL初识
- java基础之数据类型
- 【C++】模拟实现队列
- J
- opencv之视频播放控制