HDOJ 4705 Y 树形DP

DP:求出3点构成链的方案数 ,然后总方案数减去它

Y

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 1738    Accepted Submission(s): 493

Problem Description

Sample Input

4
1 2
1 3
1 4

Sample Output

1

Hint

1. The only set is {2,3,4}.

2. Please use #pragma comment(linker, "/STACK:16777216")

Source

2013 Multi-University Training Contest 10

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#pragma comment(linker, "/STACK:16777216")

using namespace std;

typedef long long int LL;

const int maxn=100100;
vector<int> g[maxn];

int n;
LL ans,doubi[maxn],son[maxn];

void dfs(int u,int fa)
{
  LL ndoubi=0,nson=0;
  son[u]=1;
  for(int i=0,sz=g[u].size();i<sz;i++)
    {
      int v=g[u][i];
      if(v==fa) continue;
      dfs(v,u);
      son[u]+=son[v];
      doubi[u]+=doubi[v]+son[v];

      ans+=son[v]*nson;
      ans+=son[v]*ndoubi;
      ans+=doubi[v]*nson;
      ans+=doubi[v];

      nson+=son[v];
      ndoubi+=doubi[v];
    }
}

int main()
{
  while(scanf("%d",&n)!=EOF)
    {
      ans=0;
      memset(doubi,0,sizeof(doubi));
      memset(son,0,sizeof(son));
      for(int i=0;i<=n+10;i++)
        g[i].clear();
      for(int i=0;i<n-1;i++)
        {
          int a,b;
          scanf("%d%d",&a,&b);
          g[a].push_back(b);
          g[b].push_back(a);
        }
      dfs(1,1);
      cout<<1LL*n*(n-1)*(n-2)/6-ans<<endl;
    }
  return 0;
}
时间: 2024-11-24 18:32:38

HDOJ 4705 Y 树形DP的相关文章

hdoj 2242 考研路茫茫——空调教室 【无向图求边双联通 缩点 + 树形dp】

考研路茫茫--空调教室 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2447    Accepted Submission(s): 721 Problem Description 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们.Lele也是其中一个.而某教室旁边又摆着两个未装上的空调,更是引起人们无限YY

HDOJ 5293 Tree chain problem LCA+树链剖分+树形DP

[题意] 给定一颗树上的几条链和每条链的权值,求能取出的不含有公共节点的链的最大权值.... [解] 预处理每条链的lca 树形DP, d[i]表示取到这个节点时可以得到的最大值 , sum[i]=sigma( d[k] | k 是i的子节点) 如果不取i  d[i]=sum[i] 如果取i , e是lca为i的链则 d[i]=max(d[i],e的权值+sigma(sum[k])-sigma(d[k]))  k为树链上的点 可以用树链剖分+树装数组在nlogn的时间复杂度内求链上的值 Tree

hdu5593--ZYB&#39;s Tree(树形dp)

问题描述 ZYB有一颗N个节点的树,现在他希望你对于每一个点,求出离每个点距离不超过KK的点的个数. 两个点(x,y)在树上的距离定义为两个点树上最短路径经过的边数, 为了节约读入和输出的时间,我们采用如下方式进行读入输出: 读入:读入两个数A,B,令fai??为节点i的父亲,fa?1??=0;fa?i??=(A∗i+B)%(i−1)+1,i∈[2,N] . 输出:输出时只需输出N个点的答案的xor和即可. 输入描述 第一行一个整数TT表示数据组数. 接下来每组数据: 一行四个正整数N,K,A,

HDU 1011 Starship Troopers(树形dp+背包)

Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13109    Accepted Submission(s): 3562 Problem Description You, the leader of Starship Troopers, are sent to destroy a base of

Vijos 1523 贪吃的九头龙 【树形DP】

贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted by JackDavid127 描述 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落. 有一天,有M个脑袋的九头龙看到一棵长有N个果子的果树,喜出望外,

Vijos p1770 大内密探 树形DP+计数

4天终于做出来了,没错我就是这么蒟蒻.教训还是很多的. 建议大家以后编树形DP不要用记忆化搜索,回溯转移状态个人感觉更有条理性. 大神题解传送门 by iwtwiioi 我的题解大家可以看注释"//"部分 本题我用的树形DP中dp[x][fa][need]表示编号为x的节点的父亲选(1)没选(0),x的父亲需(1)不需要(0)其他节点来覆盖. 若父亲节点选了,则need肯定为0,所以不存在fa==1而need==1的状态,相当于浪费了¼的空间.毕竟数据范围比较小,而且程序要有可读性!程

hdu4118 树形dp

http://acm.hdu.edu.cn/showproblem.php?pid=4118 Problem Description Nowadays, people have many ways to save money on accommodation when they are on vacation. One of these ways is exchanging houses with other people. Here is a group of N people who wan

hdu4003 树形dp+分组背包

http://acm.hdu.edu.cn/showproblem.php?pid=4003 Problem Description Humans have discovered a kind of new metal mineral on Mars which are distributed in point‐like with paths connecting each of them which formed a tree. Now Humans launches k robots on

代码风格与树形DP

Streaming很惨,不过因为比赛之间没有提交过就没掉(或掉了)rating.第二题是一个树形DP,但是我都在想第一题了,简直作死. 看着神犇的代码我也是醉了...各种宏,真是好好写会死系列. 看到他们Tree DP都用的DFS,突然感觉我这个蒟蒻的生活中充满了无力... 我一般都喜欢用BFS进行Tree DP.这样坏处很多,难调试,容易爆空间等.好处也有,写起来快,代码短,跑得飞快,判重简单.不过这样做是有条件的,而今天的Streaming这题就是一道可以的题. 然后讲讲今天这道LCASta