树形DP 2013多校8(Terrorist’s destroy HDU4679)
题意:
of the city is a number defined as the distance between the farthest two houses (As it relates to the fare).When the terrorist destroyed a road, he needs to spend some energy, assuming that the number is a.At the same time,he will get a number b which is maximum
of the Impression of two cities. The terrorist wants to know which road to destroy so that the product of a and b will be minimized.You should find the road's id.
Note that the length of each road is one.
对于v如果belong[u]==v这u所对应的子树的直径是dis[u][1]+dis[u][2];否则对应的子树直径是dis[u][0]+dis[u][2];
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include"stdio.h"
- #include"string.h"
- #include"stdlib.h"
- #include"queue"
- #include"algorithm"
- #include"string.h"
- #include"string"
- #include"math.h"
- #include"vector"
- #include"stack"
- #include"map"
- #define eps 1e-4
- #define inf 0x3f3f3f3f
- #define M 100009
- #define PI acos(-1.0)
- using namespace std;
- struct node
- {
- int u,v,w,next;
- }edge[M*2];
- int t,head[M],dis[M][4],length[M*2],belong[M];
- __int64 ans,num[M],n;
- void init()
- {
- t=0;
- memset(head,-1,sizeof(head));
- }
- void add(int u,int v,int w)
- {
- edge[t].u=u;
- edge[t].v=v;
- edge[t].w=w;
- edge[t].next=head[u];
- head[u]=t++;
- }
- void dfs(int u,int f)
- {
- dis[u][0]=dis[u][1]=dis[u][2]=0;
- for(int i=head[u];~i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(v==f)continue;
- dfs(v,u);
- if(dis[u][0]<dis[v][0]+1)
- {
- dis[u][1]=dis[u][0];
- dis[u][0]=dis[v][0]+1;
- belong[u]=v;
- }
- else if(dis[u][1]<dis[v][0]+1)
- dis[u][1]=dis[v][0]+1;
- }
- }
- void dfs1(int u,int f)
- {
- for(int i=head[u];i!=-1;i=edge[i].next)
- {
- int v=edge[i].v;
- if(v==f)
- continue;
- if(belong[u]==v)
- dis[v][2]=max(dis[u][1],dis[u][2])+1;
- else
- dis[v][2]=max(dis[u][0],dis[u][2])+1;
- dfs1(v,u);
- }
- }
- void dfs2(int u,int f)
- {
- for(int i=head[u];~i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(v==f)continue;
- if(belong[u]==v)
- {
- length[i]=dis[v][0]+dis[v][1];
- length[i^1]=dis[u][1]+dis[u][2];
- }
- else
- {
- length[i]=dis[v][0]+dis[v][1];
- length[i^1]=dis[u][0]+dis[u][2];
- }
- dfs2(v,u);
- }
- }
- int main()
- {
- int Case,i,n,a,b,c,kk=1;
- scanf("%d",&Case);
- while(Case--)
- {
- scanf("%d",&n);
- init();
- for(i=1;i<n;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- add(a,b,c);
- add(b,a,c);
- }
- dfs(1,-1);
- dfs1(1,-1);
- dfs2(1,-1);
- ans=inf;
- int id;
- for(i=0;i<t;i+=2)
- {
- //printf("%d %d %d %d\n",edge[i].u,edge[i].v,length[i],length[i^1]);
- int m=max(length[i],length[i^1])*edge[i].w;
- if(ans>m)
- {
- id=i;
- ans=m;
- }
- }
- printf("Case #%d: %d\n",kk++,(id+2)/2);
- }
- }
树形DP 2013多校8(Terrorist’s destroy HDU4679)的更多相关文章
- hdu4705 Y 简单树形DP 2013多校训练第十场 J题
题意:求一棵树中不在一条链中的三个点的对数. 转化一下,用总对数减去在一条链上的三点对数即可. 考虑经过根节点,然后可能是不同的子树中各选一个:或者是子树中选一个,然后当前节点为根的子树以外的节点选一 ...
- hdu4681 String DP(2013多校第8场)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路: 我是胡搞过的 就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串 然后对于A ...
- HDU 4679 Terrorist’s destroy (2013多校8 1004题 树形DP)
Terrorist’s destroy Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- HDU 4705 Y (2013多校10,1010题,简单树形DP)
Y Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...
- HDU4612(Warm up)2013多校2-图的边双连通问题(Tarjan算法+树形DP)
/** 题目大意: 给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 算法思想: 图的边双连通Tarjan算法+树形DP; 即通过Tarjan算法对边双连通缩图,构成一棵树,然后用树形DP求 ...
- HDU 4681 String(2013多校8 1006题 DP)
String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- HDU-4679 Terrorist’s destroy 树形DP,维护
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4679 题意:给一颗树,每个边有一个权值,要你去掉一条边权值w剩下的两颗子树中分别的最长链a,b,使得w ...
- HDU-6035 Colorful Tree(树形DP) 2017多校第一场
题意:给出一棵树,树上的每个节点都有一个颜色,定义一种值为两点之间路径中不同颜色的个数,然后一棵树有n*(n-1)/2条 路径,求所有的路径的值加起来是多少. 思路:比赛的时候感觉是树形DP,但是脑袋 ...
- hdu 6035:Colorful Tree (2017 多校第一场 1003) 【树形dp】
题目链接 单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和.反过来思考只需要求有多少条路径没有经过这种颜色即可. 具体实现过程比较复杂,很神奇的一个树形dp,下面给出一个含较详细 ...
随机推荐
- 挑战编程PC/UVa Stern-Brocot代数系统
/* Stern-Brocot代数系统 Stern-Brocot树是一种生成所有非负的最简分数m/n的美妙方式. 其基本方式是从(0/1, 1/0)这两个分数开始, 根据需要反复执行如下操作: 在相邻 ...
- 【转】 使用Redis的Pub/Sub来实现类似于JMS的消息持久化
http://blog.csdn.net/canot/article/details/52040415 关于个人对Redis提供的Pub/Sub机制的认识在上一篇博客中涉及到了,也提到了关于如何避免R ...
- C# DateTime类型和时间戳 互相转换
/// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name=”timeStamp”></para ...
- WPF绑定Model的实例对象
创建一个用户控件 1. behindcode指定this.DataContext=XXViewModel 2. "{Binding DataContext.EditModel.MId,Rel ...
- VB的try语句,异常处理
Try语句格式 Try 程式语句 Catch Throw ex Finally 释放一些连接等动作,不管有没有抛异常,都会执行到这里 End try 捕捉异常的语句是很好用的,在程式发生错误时,可以利 ...
- php---文件上传分析
文件上传: 先抄一段:预定义变量$_FILES数组有5个内容: $_FILES['userfile']['name']——客户端机器文件的原名称 $_FILES['userfi ...
- js严格模式“use strict”
js的严格模式会放弃js中的一些不正规的写法,参考 http://www.cnblogs.com/God-Shell/p/3139329.html: 使用声明"use strict&quo ...
- 多大开始玩EV3
机器人EV3还是初中生才能玩的溜 耐撕爸爸推荐年龄:初中及以上 推荐理由:无需使用计算机就可进行编程,培养孩子的编程.机械.电子.物理等综合能力. 在欧美等国家,乐高机器人融入教学已成为一种普遍现象, ...
- 如何在APICloud平台使用腾讯X5引擎
目前APICloud与腾讯X5引擎已经达成全方位的深度合作,APICloud在多个产品线深度集成X5引擎,广大APICloud开发者们即日起可通过以下几方面在你的APP中使用X5引擎,享受X5引擎带来 ...
- 在美国看中国HTML5市场的发展
近日,APICloud 创始人兼CEO刘鑫在美国旧金山和美国的HTML5开发者进行了一次近距离的接触,感受中美HTML5开发者的热度差别和不同市场阶段的中美表现巨大差异. 中国和美国的HTML5市场差 ...