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

【圖論經(jīng)典題目講解】洛谷 P2149 Elaxia的路線

這篇具有很好參考價(jià)值的文章主要介紹了【圖論經(jīng)典題目講解】洛谷 P2149 Elaxia的路線。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

P2149 Elaxia的路線

D e s c r i p t i o n \mathrm{Description} Description

給定 n n n 個(gè)點(diǎn), m m m 條邊的無向圖,求 2 2 2 個(gè)點(diǎn)對(duì)間最短路的最長(zhǎng)公共路徑

S o l u t i o n \mathrm{Solution} Solution

最短路有可能不唯一,所以公共路徑的長(zhǎng)度就有可能不同。

2 2 2 條最短路都會(huì)經(jīng)過的邊(包括同向和異向)記錄出來,并建立 1 1 1 個(gè)新圖,那么由于最短路(可以看做一條鏈)一定不會(huì)走環(huán),故新圖必定是一個(gè) 有向無環(huán)圖 (簡(jiǎn)稱 D A G \mathrm{DAG} DAG),而 D A G \mathrm{DAG} DAG 圖上就可以跑 DP 來求解最長(zhǎng)鏈,由于找出的是 2 2 2 條最短路都經(jīng)過的邊,所以最長(zhǎng)鏈其實(shí)就是 2 2 2 條最短路的最長(zhǎng)公共路徑。

故,該問題得以解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-829258.html

C o d e Code Code

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

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int SIZE = 1e6 + 10;

int N, M;
int X1, Y1, X2, Y2;
int h[SIZE], hs[SIZE], e[SIZE], ne[SIZE], w[SIZE], idx;
int D[4][SIZE], Vis[SIZE], in[SIZE], q[SIZE], hh, tt = -1;
int F[SIZE];

void add(int h[], int a, int b, int c)
{
	e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx ++;
}

void Dijkstra(int Start, int dist[])
{
	for (int i = 1; i <= N; i ++)
		dist[i] = 1e18, Vis[i] = 0;
	priority_queue<PII, vector<PII>, greater<PII>> Heap;
	Heap.push({0, Start}), dist[Start] = 0;

	while (Heap.size())
	{
		auto Tmp = Heap.top();
		Heap.pop();

		int u = Tmp.second;
		if (Vis[u]) continue;
		Vis[u] = 1;

		for (int i = h[u]; ~i; i = ne[i])
		{
			int j = e[i];
			if (dist[j] > dist[u] + w[i])
			{
				dist[j] = dist[u] + w[i];
				Heap.push({dist[j], j});
			}
		}
	}
}

void Topsort()
{
	hh = 0, tt = -1;
	for (int i = 1; i <= N; i ++)
		if (!in[i])
			q[ ++ tt] = i;
	while (hh <= tt)
	{
		int u = q[hh ++];

		for (int i = hs[u]; ~i; i = ne[i])
		{
			int j = e[i];
			if ((-- in[j]) == 0)
				q[ ++ tt] = j;
		}
	}
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	memset(h, -1, sizeof h);
	memset(hs, -1, sizeof hs);

	cin >> N >> M >> X1 >> Y1 >> X2 >> Y2;

	int u, v, c;
	while (M --)
	{
		cin >> u >> v >> c;
		add(h, u, v, c), add(h, v, u, c);
	}

	Dijkstra(X1, D[0]), Dijkstra(Y1, D[1]);
	Dijkstra(X2, D[2]), Dijkstra(Y2, D[3]);

	for (int i = 1; i <= N; i ++)
		for (int j = h[i]; ~j; j = ne[j])
		{
			int k = e[j];
			if (D[0][i] + w[j] + D[1][k] == D[0][Y1] && D[2][i] + w[j] + D[3][k] == D[2][Y2])
				add(hs, i, k, w[j]), in[k] ++;
		}

	Topsort();

	for (int it = 0; it <= tt; it ++)
	{
		int i = q[it];
		for (int j = hs[i]; ~j; j = ne[j])
		{
			int k = e[j];
			F[k] = max(F[k], F[i] + w[j]);
		}
	}

	int Result = 0;
	for (int i = 1; i <= N; i ++)
		Result = max(Result, F[i]);

	memset(hs, -1, sizeof hs);
	memset(F, 0, sizeof F);
	memset(in, 0, sizeof in);

	for (int i = 1; i <= N; i ++)
		for (int j = h[i]; ~j; j = ne[j])
		{
			int k = e[j];
			if (D[0][i] + w[j] + D[1][k] == D[0][Y1] && D[3][i] + w[j] + D[2][k] == D[2][Y2])
				add(hs, i, k, w[j]), in[k] ++;//, cout << i << " " << k << endl;
		}

	Topsort();

	for (int it = 0; it <= tt; it ++)
	{
		int i = q[it];
		for (int j = hs[i]; ~j; j = ne[j])
		{
			int k = e[j];
			F[k] = max(F[k], F[i] + w[j]);
		}
	}

	for (int i = 1; i <= N; i ++)
		Result = max(Result, F[i]);

	cout << Result << endl;

	return 0;
}

到了這里,關(guān)于【圖論經(jīng)典題目講解】洛谷 P2149 Elaxia的路線的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 洛谷題單 -- 圖論的簡(jiǎn)單入門

    洛谷題單 -- 圖論的簡(jiǎn)單入門

    圖的存儲(chǔ) - 洛谷 這一題要考察圖的存儲(chǔ)方式 , 一般可以使用鄰接矩陣 或 鄰接表來存儲(chǔ) 圖的結(jié)點(diǎn) 和1 邊的信息 ,詳情請(qǐng)看代碼 :? 【深基18.例3】查找文獻(xiàn) - 洛谷 這題考察有向圖的 dfs 和 bfs ,詳情請(qǐng)看代碼,如果用鄰接矩陣的話一定會(huì)mle,只能夠使用鄰接表,我這里采用的是用

    2024年04月13日
    瀏覽(23)
  • 算法題目題單+題解——圖論

    本文為自己做的一部分圖論題目,作為題單列出,持續(xù)更新。 題單由題目鏈接和題解兩部分組成,題解部分提供簡(jiǎn)潔題意,代碼倉(cāng)庫(kù):Kaiser-Yang/OJProblems。 對(duì)于同一個(gè)一級(jí)標(biāo)題下的題目,題目難度盡可能做到遞增。 題目鏈接:Luogu P3547 [POI2013] CEN-Price List 題解: 題目鏈接:

    2024年02月19日
    瀏覽(21)
  • 每天一道leetcode:1466. 重新規(guī)劃路線(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:1466. 重新規(guī)劃路線(圖論&中等&廣度優(yōu)先遍歷)

    n 座城市,從 0 到 n-1 編號(hào),其間共有 n-1 條路線。因此,要想在兩座不同城市之間旅行只有唯一一條路線可供選擇(路線網(wǎng)形成一顆樹)。去年,交通運(yùn)輸部決定重新規(guī)劃路線,以改變交通擁堵的狀況。 路線用 connections 表示,其中 connections[i] = [a, b] 表示從城市 a 到 b 的一條

    2024年02月12日
    瀏覽(20)
  • PAT甲級(jí)圖論相關(guān)題目

    PAT甲級(jí)圖論相關(guān)題目

    PAT甲級(jí)圖論相關(guān)題目: 分?jǐn)?shù) 25 As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city and the length of each road between any pair of cities are marked on the map. When there is an emergency call to you from some o

    2024年01月21日
    瀏覽(24)
  • 力扣377周賽第三題(圖論題目)

    力扣377周賽第三題(圖論題目)

    ?

    2024年02月04日
    瀏覽(23)
  • 二叉樹經(jīng)典算法題目

    二叉樹經(jīng)典算法題目

    省略 輸入一棵二叉樹的根節(jié)點(diǎn),求該樹的深度。從根節(jié)點(diǎn)到葉節(jié)點(diǎn)依次經(jīng)過的節(jié)點(diǎn)(含根、葉節(jié)點(diǎn))形成樹的一條路徑,最長(zhǎng)路徑的長(zhǎng)度為樹的深度。 例如: 給定二叉樹 [3,9,20,null,null,15,7] , 返回它的最大深度 3 。 思路:遞歸,當(dāng)前數(shù)的深度等于左子數(shù)和右子樹其中最大深

    2024年02月09日
    瀏覽(20)
  • 【C++】-多態(tài)的經(jīng)典題目

    【C++】-多態(tài)的經(jīng)典題目

    ??作者:小樹苗渴望變成參天大樹?? ??作者宣言:認(rèn)真寫好每一篇博客?? ??作者gitee:gitee? ??作者專欄:C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)初階,Linux,C++ 動(dòng)態(tài)規(guī)劃算法?? 如 果 你 喜 歡 作 者 的 文 章 ,就 給 作 者 點(diǎn) 點(diǎn) 關(guān) 注 吧! 今天博主專門出一篇繼承和多態(tài)的相關(guān)的題目,為了就是

    2024年02月15日
    瀏覽(15)
  • 動(dòng)態(tài)內(nèi)存面試的經(jīng)典題目

    動(dòng)態(tài)內(nèi)存面試的經(jīng)典題目

    ????????!!?????????????????????? ?????????:Solitary-walk ? ? ? ?? ? ━━━┓ ? ? ?- 個(gè)性標(biāo)簽 - :來于“云”的“羽球人”。 Talk is cheap. Show me the code ┗━━━━━━━ ?? ? 本人座右銘 : ? 欲達(dá)高峰,必忍其痛;欲戴王冠,必承其重。 ????????

    2024年01月16日
    瀏覽(16)
  • 【C語(yǔ)言】經(jīng)典題目(二)

    【C語(yǔ)言】經(jīng)典題目(二)

    C站的小伙伴們,大家好呀^^! 這一篇文章是C語(yǔ)言之經(jīng)典題目,快來跟我一起進(jìn)入C語(yǔ)言的世界吧!?? C語(yǔ)言其他刷題篇在這里哦: 【C】語(yǔ)言經(jīng)典題目(一) 【C語(yǔ)言】字符串—刷題篇 給出三角形的邊長(zhǎng),求三角形的面積。 利用海倫公式求三角形面積 area=根號(hào)下 s*(s-a)*(s-b

    2024年02月07日
    瀏覽(20)
  • 接口經(jīng)典題目

    接口經(jīng)典題目

    ? White graces:個(gè)人主頁(yè) ??專欄推薦:《Java入門知識(shí)》?? ???內(nèi)容推薦:繼承與組合:代碼復(fù)用的兩種策略?? ??今日詩(shī)詞: 人似秋鴻來有信,事如春夢(mèng)了無痕。 ?? 目錄 ??一.題目?? ??二.創(chuàng)建接口和類文件?? ??1.USB接口?? ??2.Mouse類?? ??3.Keyboard類?? ??三.筆記本類??

    2024年02月11日
    瀏覽(14)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包