国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核

這篇具有很好參考價值的文章主要介紹了從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

有關(guān)消防一題中最優(yōu)解一定在直徑上的證明
P2491 [SDOI2011] 消防
P1099 [NOIP2007 提高組] 樹網(wǎng)的核

題目描述

在一顆 \(n\) 個節(jié)點的無根樹中,找到一條不超過 \(s\) 的路徑,使得圖中所有點到此路徑距離的最大值最小,圖中邊權(quán)非負

分析

若想將此題轉(zhuǎn)化到樹網(wǎng)的核,需要證明對于任意一條不在直徑上的路徑,都能在直徑上找到更優(yōu)解
首先理解一個顯然的結(jié)論:路徑越長,結(jié)果越優(yōu)

證明

以下過程中所用符號及其含義:

  • \(f(i)\) 表示從 \(i\) 出發(fā)不經(jīng)過直徑上的邊所能到達的最長距離
  • \((u, v)\) 為樹的直徑, \(L\) 為直徑長度
  • \((A, B)\) 為所取不在直徑上的路徑
  • \(d(i, j)\)\(i\)\(j\) 間的路徑長

Part 1 : 所選路徑與直徑有交集

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核
根據(jù)直徑的最長性,很容易得到如下性質(zhì):

  1. 對于 \((A, C)\) 路徑上的每一點\(i\), 都有\(f(i) \leq d(u, C)\)

如果大于,那么 $ f(i) + d(i, v) > L$, 與直徑的最長性矛盾

  1. 對于\((D, B)\) 路徑上的每一點 \(i\), 都有\(f(i) \leq d(D, v)\)

通過觀察發(fā)現(xiàn),只需截取 \((C, D)\) 就能滿足1,2兩條性質(zhì)
由此我們可以將 \((A, C)\)\((D, B)\) 稱作是多余的,完全可以將\(AC, DB\) 的長度轉(zhuǎn)化到直徑上獲得更優(yōu)解


第一部分證畢。

Part 2 : 所選路徑與直徑無交集

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核

\(x \leq y\) , \(y \geq \dfrac{L} {2}\)

設(shè) \(val1\) 為圖中所有點到 \(AB\) 的最大距離,則一定有

$$val1 = y + z $$

考慮用反證法證明:假設(shè)存在點 \(C\),使得 \(C\)\(AB\) 的距離大于 \(val1\)

其中 \(C\)\(AB\) 距離的最小值 $$d = val1 + 1$$
為了保證不重不漏,我們也把 \(C\)\(AB\) 的路徑劃分為經(jīng)過直徑不經(jīng)過直徑兩類

case 1:

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核
$ d + z + y > L $ 矛盾

case 2:

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核
\((d - w - z) + (x + w) = x + y + 1 > L\) 矛盾

因此 $ val1 = y + z $ 得證。

構(gòu)造更優(yōu)解

從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核
考慮在原圖中只取點 \(O\) 作為所選路徑
根據(jù)定義

\[val2 = max(x, y, f(O)) = y \]

$f(O) \leq \dfrac{L}{2} $

整理一下

\[va1 = y + z, val2 = y \]
\[val2 \leq val1 \]

第二部分證畢。
由于 \(z\) 可以取到0, 一種更嚴謹?shù)恼f法是:對于任意一條與直徑不相交的路徑都不能在直徑上構(gòu)造出次優(yōu)解

文章來源地址http://www.zghlxwxcb.cn/news/detail-745972.html

AC代碼

#include<bits/stdc++.h>
#define ll long long

using namespace std;
const ll N = 5e5 + 5;

int n, vis[N], a[N];
ll s, d[N], sum[N];

vector<pair<int, ll> > H[N];
pair<int, ll> pre[N];

int bfs(int source) {
	memset(d, -1, sizeof d);
	queue<int> q;
	q.push(source);
	d[source] = 0;
	while(!q.empty()) {
		int x = q.front();
		q.pop();
		for(auto [y, z] : H[x]) {
			if(d[y] == -1) {
				d[y] = d[x] + z;
				pre[y] = {x, z};
				q.push(y);
			}
		}
	}
	int ret = source;
	for(int i = 1; i <= n; ++ i) {
		if(d[ret] < d[i]) ret = i;
	}
	return ret;
}

void dfs(int x) {
	vis[x] = 1, d[x] = 0;
	for(auto [y, z] : H[x]) {
		if(vis[y]) continue;
		dfs(y);
		d[x] = max(d[x], d[y] + z);
	} 
}

int main() {
	ios :: sync_with_stdio(0);
	cin.tie(nullptr);
	cin >> n >> s;
	for(int i = 1, x, y, z; i < n; ++ i) {
		cin >> x >> y >> z;
		H[x].push_back({y, z});
		H[y].push_back({x, z});
	}
	int u = bfs(1);
	int v = bfs(u);
	int p = v, idx; ll maxd = -2e9, ans = 2e9;
	while(p != u) {
		a[++ idx] = p;
		p = pre[p].first;
	}
	a[++ idx] = u;
	for(int i = 1; i <= idx; ++ i) vis[a[i]] = 1;
	for(int i = 1; i <= idx; ++ i) {
		dfs(a[i]);
		sum[i] = sum[i - 1] + pre[a[i - 1]].second;
		maxd = max(maxd, d[a[i]]);
	}
	for(int i = 1, j = 1; i <= idx; ++ i) {
		while(sum[j + 1] - sum[i] <= s && j < idx) ++ j;
		ans = min(ans, max({maxd, sum[i], sum[idx] - sum[j]}));
	}
	cout << ans;
	return 0;
}

到了這里,關(guān)于從[SDOI2011]消防 到[NOIP2007]樹網(wǎng)的核的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • #P1007. [NOIP2007提高組] 矩陣取數(shù)游戲

    帥帥經(jīng)常跟同學玩一個矩陣取數(shù)游戲:對于一個給定的?n times mn×m?的矩陣,矩陣中的每個元素?a_{i,j}ai,j??均為非負整數(shù)。游戲規(guī)則如下: 每次取數(shù)時須從每行各取走一個元素,共?nn?個。經(jīng)過?mm?次后取完矩陣內(nèi)所有元素; 每次取走的各個元素只能是該元素所在行的行

    2024年02月15日
    瀏覽(18)
  • 【洛谷 P1097】[NOIP2007 提高組] 統(tǒng)計數(shù)字 題解(映射)

    注意 :數(shù)據(jù)可能存在加強。 某次科研調(diào)查時得到了 n n n 個自然數(shù),每個數(shù)均不超過 1.5 × 1 0 9 1.5 times 10^9 1.5 × 1 0 9 。已知不相同的數(shù)不超過 1 0 4 10^4 1 0 4 個,現(xiàn)在需要統(tǒng)計這些自然數(shù)各自出現(xiàn)的次數(shù),并按照自然數(shù)從小到大的順序輸出統(tǒng)計結(jié)果。 共 n + 1 n+1 n + 1 行。 第一

    2024年02月09日
    瀏覽(16)
  • 洛谷 P3304 [SDOI2013] 直徑 題解

    題目鏈接 第一部分好說,求直徑,dfs或者DP都可以。 第二部分,有一個定理,就是所有直徑中點重疊。 那么有兩種情況 一種是中點在一個節(jié)點上,那么顯然這個點是每條直徑的終點,也就是說直徑的一半相等。從這個點出發(fā)dfs,找出所有最遠點。如果只有兩條,輸出depth之

    2024年02月14日
    瀏覽(30)
  • P1972 [SDOI2009] HH的項鏈

    HH 有一串由各種漂亮的貝殼組成的項鏈。HH 相信不同的貝殼會帶來好運,所以每次散步完后,他都會隨意取出一段貝殼,思考它們所表達的含義。HH 不斷地收集新的貝殼,因此,他的項鏈變得越來越長。 有一天,他突然提出了一個問題:某一段貝殼中,包含了多少種不同的貝

    2023年04月12日
    瀏覽(11)
  • 支持向量機上的核函數(shù)對比

    支持向量機上的核函數(shù)對比

    ? ?

    2023年04月24日
    瀏覽(12)
  • 利用圖和側(cè)信息的核概率矩陣

    利用圖和側(cè)信息的核概率矩陣

    文章信息 本周閱讀的論文是一篇2012年發(fā)表在《Proceedings of the 2012 SIAM International Conference on Data Mining》上關(guān)于概率矩陣分解的文章,題目為《Kernelized Probabilistic Matrix Factorization Exploiting Graphs and Side Information》。 摘要 我們提出了一種新的矩陣補全算法——核化概率矩陣分解(

    2024年04月27日
    瀏覽(21)
  • Linux下多核CPU指定程序運行的核

    Linux下多核CPU指定程序運行的核

    查看CPU核心數(shù)量:lscpu 1.4.1 通過運行時的參數(shù)設(shè)置 1.4.2 通過代碼設(shè)置 查看程序的PID 查看程序可運行的核 得出該程序可以在0-3 4個核上運行。 假設(shè)我們要使程序運行在第2個核上: 查看程序的PID 查看程序可運行的CPU核 得出設(shè)置成功,已將程序綁定在CPU的第2個核上。

    2024年02月21日
    瀏覽(19)
  • C語言刷題中遇到的一些很看重數(shù)學邏輯的題目(代碼很簡單,但是邏輯確實異曲同工)

    這一題的關(guān)鍵就是flat1和flat2兩個變量的設(shè)立 flat1判斷整個序列是否升序,比較相鄰兩個數(shù),如果前者小于后者,則將flat1賦值為1 flat2判斷整個序列是否升序,比較相鄰兩個數(shù),如果前者大于后者,則將flat1賦值為1 然而整個序列有序的條件就是相鄰的兩個數(shù)一直是前者大于后

    2024年02月13日
    瀏覽(16)
  • [COCI2010-2011#6]STEP

    [COCI2010-2011#6]STEP

    目錄 1.題目: 題目描述 輸入格式 輸出格式 2.思路 1.ans數(shù)組的維護 2.L and R 的維護 3.ne數(shù)組與pr數(shù)組的維護 4.len數(shù)組: ?3.代碼: 1.有注釋版: 2.copy版: 給定一個長度為N的字符序列? ,初始時序列中全部都是字符L。 有 q次修改,每次給定一個 x,若為L,則將?修改成R,否則將

    2024年02月15日
    瀏覽(16)
  • 英二閱讀單詞【2011 t1】

    T1 危機當前,留住外部董事 apparently? ? ? ? 顯然地 attracting? ? ? ? 吸引 compensation? ? ? ? 薪酬 unremarked? ? ? ? 未被注意的 take up? ? ? ? 占用 presumably? ? ? ? 可能 proposal? ? ? ? 提議 weathered? ? ? ? 平安地渡過 simply? ? ? ? 僅僅 proxy? ? ? ? 代理 departing? ? ? ? 離開

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包