hdu3660
来源:互联网 发布:包工头app软件下载 编辑:程序博客网 时间:2024/06/16 21:37
/*
分析:
简单的tree dp,难点是理解题意。。。
从下往上dp,如果是奇数步,就记录这个点往下可以得到的
在[L,R]内的最大的dis;如果是偶数步,就相反。
2013-06-26
*/
分析:
简单的tree dp,难点是理解题意。。。
从下往上dp,如果是奇数步,就记录这个点往下可以得到的
在[L,R]内的最大的dis;如果是偶数步,就相反。
2013-06-26
*/
#include"iostream"#include"cstdio"#include"cstring"using namespace std;const int N=500005;int n,L,R,dp[N],flag[N];struct Edge{int v,len,next;}edge[N];int tot,head[N];void dfs(int k,int step,int dis){if(head[k]==-1){dp[k]=0;if(L<=dis && dis<=R)flag[k]=1;return ;}int j,v;int min=1234567890,max=-1;for(j=head[k];j!=-1;j=edge[j].next){v=edge[j].v;dfs(v,step+1,dis+edge[j].len);if(!flag[v])continue;flag[k]=1;if(step%2 && dp[v]+edge[j].len<min)min=dp[v]+edge[j].len;if(step%2==0 && max<dp[v]+edge[j].len)max=dp[v]+edge[j].len;}if(step%2)dp[k]=min;elsedp[k]=max;}int main(){int i;int a,b,c;while(scanf("%d%d%d",&n,&L,&R)!=-1){tot=0;memset(head,-1,sizeof(head));for(i=1;i<n;i++){scanf("%d%d%d",&a,&b,&c);edge[tot].v=b;edge[tot].len=c;edge[tot].next=head[a];head[a]=tot++;}memset(flag,0,sizeof(flag));dfs(0,0,0);if(dp[0]==-1)printf("Oh, my god!\n");elseprintf("%d\n",dp[0]);}return 0;}
- hdu3660
- hdu3660 Alice and Bob's Trip 树形dp
- 在VMware-workstation 里安装XP系统步骤(图解)
- 加载配置信息
- win8系统快捷键
- JQuery实现表格的相同单元格合并的三种方法
- iperf测试throughput
- hdu3660
- Oracle查询中rownum与Order by查询的关系(取数据的前几条)
- 线程间通信
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
- Tsung的安装和使用
- dispatchTouchEvent/dispatchTouchEvent/onInterceptTouchEvent调用时机
- Spring2.5教程:3、Bean
- Phonegap-----Media
- POJ-1191-棋盘分割