這是個神仙題,會卡常
題目讓你改一條邊把直徑變得最短。
列舉每條邊,會把圖分成兩個地方,兩個連通塊(x區和y區域)都換根dp一下,算出離x最遠的點的距離記為dis【x】。然後列舉一下
新直徑有三個** 1 max dis[x]x裡面最大的 ,2 dis[y]y裡面最大的 ,3 ,min(dis[x] + dis[y] + len)
具體看**吧,不能用vector會卡常qaq
#include#include#include#includeusing namespace std;const int maxn = 5050+11;
typedef long long ll;
struct nodeg[maxn*3];
int head[maxn];
int cnt = 0;
int n;
void add(int x,int y,ll len)
ll dp[maxn],dp2[maxn];
int cal(int x,ll val)
else
} return 0;
}int dfs(int x,int fa)
return 0;
}ll cns = 1e15;
ll dd;
int dfs2(int x,int fa)
else
dfs2(p,x); }
return 0;
}int main()
} printf("%lld\n",ans);
return 0;
}
TJOI2017 城市(樹的直徑)
從加里敦大學城市規劃專業畢業的小明來到了乙個地區城市規劃局工作。這個地區一共有ri座城市,1條高速公路,保證了任意兩運城市之間都可以通過高速公路相互可達,但是通過一條高速公路需要收取一定的交通費用。小明對這個地區深入研究後,覺得這個地區的交通費用太貴。小明想徹底改造這個地區,但是由於上司給他的資源有...
TJOI2017 城市 樹的直徑,貪心
這道題,調了我一晚上.一直80分 考慮到幾點 所以我們先列舉斷開直徑上的邊,然後分別找到斷開後兩棵子樹的直徑.接著我們討論 dis 1,dis 2 最優情況.其 dis 為其到子樹直徑較遠的一端.如果 x 1,x 2 在子樹的直徑上,那麼顯然會更優,因為如果不在直徑上,它還會多出一小段距離.然後就可...
TJOI 2017 城市 題解
題目傳送門 題目大意 給一棵邊帶權的樹,你可以將一條邊換個位置,換完之後還得是一棵樹,要求換完之後樹的直徑最小。o n o n o n 做法太強了,只能想到 o n 2 o n 2 o n2 的做法 考慮列舉刪去哪一條邊,假如刪掉當前列舉的邊,那麼整棵樹會被分成兩個部分,然後我們要把這條邊重新找個位...