【樹形DP】 HDU 2196 Computer

題意:求節點間的最大距離


先DFS一次 記錄下 每一節點的子樹下的最大距離(DP[ u ] [ 0 ])和第二大距離(DP[ u ] [ 1 ])

用DP[ v ] [ 2 ] 表示由v的父節點來的最大距離

再取DP[ u ] [ 0 ] 與 DP[ u ][ 2 ] 的最值

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <time.h>;
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define IN   freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 10014;
const int MAXM = 20014;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
struct node
{int v,next;LL val;
} edge[MAXM];
int head[MAXM],tol;
LL dp[MAXN][3];
bool vis[MAXN];
void init()
{cler(head,-1);tol=0;
}
void addedge(int u,int v,LL val)
{edge[tol].v=v,edge[tol].val=val,edge[tol].next=head[u];head[u]=tol++;edge[tol].v=u,edge[tol].val=val,edge[tol].next=head[v];head[v]=tol++;
}
void dfs1(int u)
{if(vis[u]) return ;vis[u]=true;for(int i=head[u]; ~i; i=edge[i].next){int v=edge[i].v;if(!vis[v]){dfs1(v);dp[u][1]=max(dp[u][1],dp[v][0]+edge[i].val);if(dp[u][1]>dp[u][0])swap(dp[u][1],dp[u][0]);}}
}
void dfs2(int u)
{if(vis[u]) return ;vis[u]=true;for(int i=head[u]; ~i; i=edge[i].next){int v=edge[i].v,val=edge[i].val;if(!vis[v]){if(dp[u][0]>dp[v][0]+val)//dp[u][0]不是由dp[v][0]+val而來的dp[v][2]=max(dp[v][2],max(dp[u][0]+val,dp[u][2]+val));//所以從非v子樹來的更長else //dp[u][0]由dp[v][0]+val而來的dp[v][2]=max(dp[v][2],max(dp[u][1]+val,dp[u][2]+val));//推斷非v子樹來的哪個長dfs2(v);}}
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);
#endifint n;while(~scanf("%d",&n)){init();for(int i=2; i<=n; i++){int a;LL b;scanf("%d %I64d",&a ,&b );addedge(i,a,b);}cler(vis,false);cler(dp,0);dfs1(1);cler(vis,false);dfs2(1);for(int i=1;i<=n;i++)printf("%I64d\n",max(dp[i][2],dp[i][0]));}}


轉載于:https://www.cnblogs.com/gccbuaa/p/7091545.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371837.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

適當的Java堆大小的5個技巧

確定生產系統合適的Java堆大小不是一件容易的事。 在我的Java EE企業經驗中&#xff0c;我發現由于Java堆容量和調整不足而導致的多個性能問題。 本文將為您提供5個技巧&#xff0c;這些技巧可以幫助您確定當前或新生產環境的最佳Java堆大小。 這些技巧中的一些對于預防和解決j…

pythondocumentation是什么_怎樣閱讀Python官方文檔

如何閱讀官方Python文檔的初學者,因為他們沒有相關的經驗,學習語言通常是費時且勞動密集型和效果不是很好。下面簡要介紹如何閱讀官方文件。一旦你學會快速查詢官方文件,學習效率會提高很多文檔門戶。如何閱讀API文檔中內容標準庫,如何快速找到你想要的。第一種方法是先查找索引…

數據庫過大無法導入

導SQL數據庫結構數據時&#xff0c;如果數據是批量插入的話會報錯&#xff1a;2006 - MySQL server has gone away。 解決辦法&#xff1a;找到你的mysql目錄下的my.ini配置文件&#xff0c;加入以下代碼 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…

UVa 11475 - Extend to Palindrome

題目&#xff1a;給你一個字符串&#xff0c;在後面拼接一部分使得它變成回文串&#xff0c;使得串最短。輸出這個回文串。分析&#xff1a;KMP&#xff0c;dp。這裡利用KMP算法將串和它的轉置匹配&#xff0c;看結束時匹配的長度就可以。 因為串比較長。使用KMP比較合適&#…

構建Java Web應用程序時遵循MVC的三個步驟

步驟1 做 始終通過servlet / action bean處理URL&#xff08;POST表單&#xff0c;單擊鏈接等&#xff09;&#xff0c;而不是通過JSP處理 為什么 ActionBeans&#xff08;無論某些框架調用那些類&#xff09;&#xff0c;而servlet很少是控制器 用于處理用戶輸入。 JSP是專用于…

曝光原理_泰國精戈咖啡效果反饋 作用原理曝光

我的男人才三十五六&#xff0c;兩個人就開始分開睡了&#xff0c;自從咱們在一起以來&#xff0c;咱們的感情一向很好&#xff0c;這是十分調和的。但隨著年紀的添加&#xff0c;我逐漸發現他身體闌珊的越來越兇猛&#xff0c;夫妻生活方面硬度逐漸下降&#xff0c;時間也越來…

使用junit4測試Spring

Spring 提供便捷的測試&#xff0c;非常方便整合Junit 導入 spring-test-3.2.0.RELEASE.jar ---- 提供與Junit的整合 RunWith(SpringJUnit4ClassRunner.class) // 整合 ContextConfiguration(locations"classpath:applicationContext.xml") // 加載配置public class…

EasyCriteria –使用JPA Criteria的簡便方法

今天&#xff0c;我們將看到有關此工具的信息&#xff0c;該工具使使用JPA Criteria更加容易。 使用該庫的應用程序將在JPA實現中更加簡潔&#xff0c;易于使用和可移植。 在本文的結尾&#xff0c;您將找到要下載的源代碼。 什么是標準&#xff1f; 當前是創建動態查詢的最佳…

語言模擬蒲豐問題_R語言小數定律的保險業應用:泊松分布模擬索賠次數

原文鏈接&#xff1a;拓端數據科技 / Welcome to tecdat?tecdat.cn在保險業中&#xff0c;由于分散投資&#xff0c;通常會在合法的大型投資組合中提及大數定律。在一定時期內&#xff0c;損失“可預測”。當然&#xff0c;在標準的統計假設下&#xff0c;即有限的期望值和獨立…

THINKPHP

路徑 /index.php/home/...一般路徑應用或者U方法轉載于:https://www.cnblogs.com/lidepeng/p/6180631.html

JavaScript下的進制轉換

JavaScript下的進制轉換 //十進制轉其他進制 var num 99; console.log(十進制: , num); console.log(八進制:, (num).toString(8)) console.log(十六進制:, (num).toString(16)) console.log(三十二進制:, (num).toString(32))//其他轉十進制 var x 110; console.log(二進制&…

Spring Security第2部分–密碼加密,自定義404和403錯誤頁面

這是Spring安全站的第二部分。 在這篇文章中&#xff0c;我將向您展示如何使用MD5加密密碼以及自定義403和404狀態代碼錯誤頁面。 如果您尚未閱讀第1部分&#xff0c;請單擊 此處 。 因為我們在這里繼續第1部分項目。 下載已完成的項目&#xff1a; http : //www.mediafire.com…

淺談 PHP 與手機 APP 開發(API 接口開發)

本文內容轉載自:http://www.thinkphp.cn/topic/5023.html 這個帖子寫給不太了解PHP與API開發的人一、先簡單回答兩個問題&#xff1a;1、PHP 可以開發客戶端&#xff1f;答&#xff1a;不可以&#xff0c;因為PHP是腳本語言&#xff0c;是負責完成 B/S架構 或 C/S架構 的S部分&…

獲取人口_「微科普」14億人口數據是如何得到的?

中國經濟交出了2019年終答卷GDP總量近百萬億元人均GDP突破1萬美元……小伙伴們在關心經濟發展的同時也非常關注人口數據14億人口的話題嗖的一下就上了熱搜大家想不想知道14億人口的數據是怎么得到的&#xff1f;我們今天就來科普一下如何獲取人口總量&#xff1f;通常情況下&am…

8.動態規劃(1)——字符串的編輯距離

動態規劃的算法題往往都是各大公司筆試題的常客。在不少算法類的微信公眾號中&#xff0c;關于“動態規劃”的文章屢見不鮮&#xff0c;都在試圖用最淺顯易懂的文字來描述講解動態規劃&#xff0c;甚至有的用漫畫來解釋&#xff0c;認真讀每一篇公眾號推送的文章實際上都能讀得…

更改Java包名稱如何改變我的系統架構

即使只是少量更改角度&#xff0c;也可能對您如何使用系統產生深遠影響。 假設您正在用Java編寫Web應用程序。 在系統中&#xff0c;您處理訂單&#xff0c;客戶和產品。 作為Web應用程序&#xff0c;您的類包括諸如Controller&#xff0c;PersonRepository&#xff0c;Custome…

靜態屬性_Java面試題—內部類和靜態內部類的區別

內部類和靜態內部類的區別內部類&#xff1a;1、內部類中的變量和方法不能聲明為靜態的。2、內部類實例化&#xff1a;B是A的內部類&#xff0c;實例化B&#xff1a;A.B b new A().new B()。3、內部類可以引用外部類的靜態或者非靜態屬性及方法。靜態內部類&#xff1a;1、靜態…

儲存與更新 access_token

做微信的項目&#xff0c;一開始就是 access_token 的申請&#xff0c;微信文檔上寫的比較清楚&#xff1a; 1、為了保密appsecrect&#xff0c;第三方需要一個access_token獲取和刷新的中控服務器。而其他業務邏輯服務器所使用的access_token均來自于該中控服務器&#xff0c;…

Eclipse安裝以及JDK環境變量配置

首先是下載Eclipse&#xff1b;點擊鏈接打開Eclipse官網eclipse官網點擊DownLoad Packages&#xff0c;注意是點擊“DownLoad Packages”點擊你需要的版本開始下載&#xff08;一般是64bit Eclipse IDE&#xff09;等待幾秒鐘&#xff0c;開始下載這樣Eclipse已經下載好了&…

完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

我們創建了這篇文章&#xff0c;將展示如何使用以下工具創建完整的Web應用程序&#xff1a;Tomcat7&#xff0c;帶有Primefaces的JSF2&#xff08;Facelets和Libraries&#xff09;&#xff08;具有AutoComplete&#xff09;&#xff0c;JPA / Hibernate&#xff08;具有NxN關系…