2017CCPC中南地區賽 H題(最長路)

2022-05-02 14:00:08 字數 1644 閱讀 1806

來自湘潭大學oj,題號:1267。

這裡用到了乙個樹的直徑(樹中的最長邊)的結論:當你找到一棵樹的最長邊後,這個樹中所有點的最長邊必定和這條邊的兩個端點相連。下面給出證明:

設這條最長邊的兩個端點分別為b和e;

1.當選擇的任意點m在這條最長邊上時:如果此時還存在另乙個點t,使得mt > max。則:mt + min > max + min = be這與題目假設相矛盾。

2.當選擇的任意點m不在這條最長邊上時:

α.與它相連的最長邊與be有交點時,假設交於x,則:m的最長邊 = mx + x的最長邊,而x在be上,所以m的最長邊 = mx + max即它的最長邊終止於be中的乙個點。

b.若無交點,假設m的最長邊為mn,則:取be上一點x,連線mx,有:mn > max + xm,mn + mx + max > 2mx + 2max > be與題設矛盾

由此,本題思路即為:先找到最長邊,然後將其餘的n - 2個點到最長邊兩個端點的距離算出,不斷地挑選這n-2個點到兩個端點的更長的那個路徑,最後加上這條最長路就是所求結果。

下面的**用c++11提交能過,而用g++則會wa

#include#include

#include

#include

#include

#include

#define maxn 100005

#define f 0x3f

using

namespace

std;

struct

edge

};long

long dist[3

][maxn];

vector

graph[maxn];

inline

void

init()

queue

q;void bfs(int use,int

start)}}

return;}

intmain()

intpoint1,point2;

memset(dist,-1,sizeof

(dist));

//printf("now dist is %lld\n",dist[0][0]);

bfs(0,1

);

long

long maxone = 0

;

for(int i = 2;i <= n;++i)

maxone = 0

; bfs(

1,point1);

for(int i = 1;i <= n;++i)

bfs(

2,point2);

//printf("point1 is %d and point2 is %d\n",point1,point2);

long

long answer = 0

; answer += dist[1

][point2];

for(int i = 1;i <= n;++i)

}if(n == 1) answer = 0

; printf(

"%lld\n

",answer);

}return0;

}

2023年CCPC中南地區邀請賽總結

週六下午到的時候來到訂的酒店樓下卻發現酒店在裝修,感嘆湘潭人名寫意的生活態度。來不及休息,趕緊帶著行李參加熱身賽。因為前輩有在比賽中失誤重啟的經歷,我們特地重啟了下看d盤是否會還原。熱身賽題目比較簡單,大多是湘潭大學自己的題目,而且很多學校沒來,三發1a,排名第10。比賽時間週日上午9.00 14....

CCPC中南地區邀請賽小結

此行的時間很趕,周五出發週日回,杭州到湘潭,坐的是火車,還是比較累的。週六早上到,翻山越嶺找到了賓館,休息了一會兒就去找網咖了,因為下午還有一場團體天梯賽。在網咖裡待了三個多小時,這場初賽的題目相對上次的模擬題來說好像稍微好寫一點,不過因為沒帶紙和筆,最後一題沒仔細的推算,只能搞個26分。從網咖出來...

2017 CCPC 哈爾濱站 銀牌題彙總

a palindrome hdu 6230 題目大意 乙個字串找出有多少 乙個半回文串 乙個半回文串的定義為,兩個回文串恰好a的右邊界是b的回文中心,而b的左邊界恰好是a的回文中心。題目思路 有兩種做法,主席樹和樹狀陣列,主席樹慢些但是題目並不想卡主席樹。分析題目可以知道,只要求出有多少對回文串相互...