国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

平面設(shè)計(jì)類網(wǎng)站app開發(fā)公司排行榜

平面設(shè)計(jì)類網(wǎng)站,app開發(fā)公司排行榜,單頁網(wǎng)站模板wap,哪里可以做虛擬貨幣網(wǎng)站【題目鏈接】 ybt 1520:【 例 1】分離的路徑 洛谷 P2860 [USACO06JAN]Redundant Paths G 【題目考點(diǎn)】 1. 圖論:割邊(橋) 邊雙連通分量 【解題思路】 每個(gè)草場是一個(gè)頂點(diǎn),草場之間的雙向路是無向邊,該…

【題目鏈接】

ybt 1520:【 例 1】分離的路徑
洛谷 P2860 [USACO06JAN]Redundant Paths G

【題目考點(diǎn)】

1. 圖論:割邊(橋) 邊雙連通分量

【解題思路】

每個(gè)草場是一個(gè)頂點(diǎn),草場之間的雙向路是無向邊,該圖是無向圖。建新的道路,就是添加邊。
“每對(duì)草場之間已經(jīng)有至少一條路徑”,表示該圖是連通圖。
“同一對(duì)草場之間,可能已經(jīng)有兩條不同的道路”,表示圖中可能有重邊。
“使每一對(duì)草場之間都會(huì)至少有兩條相互分離的路徑”,而且“兩條路徑相互分離,是指兩條路徑?jīng)]有一條重合的道路”,也就是希望最后圖中任何兩個(gè)頂點(diǎn)之間都有兩條邊不重復(fù)的路徑,這樣的圖就是邊雙連通圖。
求的是最少增加的路徑的數(shù)目。
該題抽象后可以描述為:給定一個(gè)無向圖,求最少添加幾條邊可以使該圖變?yōu)檫呺p連通圖。

如果兩頂點(diǎn)處于一個(gè)邊雙連通分量中,那么這兩頂點(diǎn)之間就一定不需要添加邊,因?yàn)閮身旤c(diǎn)之間已經(jīng)存在兩條邊不重復(fù)的路徑。因此只有兩頂點(diǎn)在不同的邊雙連通分量中,才需要考慮是否需要在兩頂點(diǎn)之間添加邊。
這里可以考慮將圖中每個(gè)邊雙連通分量變?yōu)橐粋€(gè)頂點(diǎn),也就是“縮點(diǎn)”,縮點(diǎn)后的圖一定不存在雙連通分量,是無環(huán)連通圖,也就是樹。

反證:如果縮點(diǎn)后存在環(huán),那么環(huán)上多個(gè)頂點(diǎn)處于一個(gè)雙連通分量中,在原圖中該環(huán)連接的所有雙連通分量應(yīng)該同屬于一個(gè)雙連通分量,應(yīng)該縮為一個(gè)點(diǎn)而不是多個(gè)點(diǎn)。

考慮要想使縮點(diǎn)后的樹變?yōu)殡p連通圖,需要添加最少多少條邊。
樹上任意兩頂點(diǎn)連線后,就會(huì)形成一個(gè)環(huán),該環(huán)就是一個(gè)雙連通分量。
由于環(huán)上的頂點(diǎn)都是度為2的頂點(diǎn),因此樹上葉子結(jié)點(diǎn),也就是度為1的頂點(diǎn)要想處于一個(gè)環(huán)上,必須在度為1的頂點(diǎn)上連接新的邊,使該頂點(diǎn)度變?yōu)?。
因此每次添加一條邊連接兩個(gè)度為1的頂點(diǎn),讓這兩個(gè)頂點(diǎn)在樹上的路徑加上新的邊形成一個(gè)環(huán)。
每兩個(gè)度為1的頂點(diǎn)需要添加一條邊,如果剩下單獨(dú)一個(gè)頂點(diǎn),也需要在該頂點(diǎn)上增加一條到其它頂點(diǎn)的邊。
如果葉子結(jié)點(diǎn)數(shù)量為 d d d,那么需要添加邊的數(shù)量為 ? d 2 ? \lceil \fracieo6y2aa{2} \rceil ?2d??,也就是 d + 1 2 \frac{d+1}{2} 2d+1?

【題解代碼】

解法1:Tarjan算法直接求邊雙連通分量
#include <bits/stdc++.h>
using namespace std;
#define N 5005
int n, m, fa[N], ebc[N], en, deg[N];
vector<int> edge[N];
int dfn[N], low[N], ts;
stack<int> stk;
void tarjan(int u)
{int t, fromEdge = 0;//fromEdge:從fa[u]到u的邊的數(shù)量 dfn[u] = low[u] = ++ts;stk.push(u);for(int v : edge[u]){if(dfn[v] == 0){fa[v] = u;tarjan(v);low[u] = min(low[u], low[v]);}else if(v != fa[u] || ++fromEdge > 1)//如果fromEdge==2,那么(u, fa[u])存在重邊,更新low[u]后可以保證(u,fa[u])不是橋 low[u] = min(low[u], dfn[v]);}if(dfn[u] == low[u]){en++;do{t = stk.top();stk.pop();ebc[t] = en;}while(t != u);}
}
int main()
{int f, t, degOneCt = 0;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> f >> t;edge[f].push_back(t);edge[t].push_back(f);}for(int v = 1; v <= n; ++v)	if(dfn[v] == 0)tarjan(v);for(int u = 1; u <= n; ++u)for(int v : edge[u]) if(ebc[v] != ebc[u])deg[ebc[v]]++, deg[ebc[u]]++;for(int i = 1; i <= en; ++i)//<u, v>, <v, u>統(tǒng)計(jì)兩次,頂點(diǎn)的度應(yīng)該除以2 deg[i] /= 2;for(int i = 1; i <= en; ++i) if(deg[i] == 1)//統(tǒng)計(jì)度為1的雙連通分量的數(shù)量 degOneCt++;cout << (degOneCt+1)/2;return 0;
}
解法2:Tarjan算法先求橋,再求雙連通分量
#include <bits/stdc++.h>
using namespace std;
#define N 5005
int n, m, fa[N], ebc[N], en, deg[N];
vector<int> edge[N];
int dfn[N], low[N], ts;
bool bridge[N], vis[N];//bridge[i]:(i, fa[i])是否是橋
bool isBridge(int u, int v)
{return fa[u] == v && bridge[u] || fa[v] == u && bridge[v];
}
void tarjan(int u)
{int t, fromEdge = 0;//fromEdge:從fa[u]到u的邊的數(shù)量 dfn[u] = low[u] = ++ts;for(int v : edge[u]){if(dfn[v] == 0){fa[v] = u;tarjan(v);low[u] = min(low[u], low[v]);if(dfn[u] < low[v])bridge[v] = true;//(u,v)是橋 }else if(v != fa[u] || ++fromEdge > 1)//如果fromEdge==2,那么(u, fa[u])存在重邊,更新low[u]后可以保證(u,fa[u])不是橋 low[u] = min(low[u], dfn[v]);}
}
void dfs(int u)
{vis[u] = true;ebc[u] = en;for(int v : edge[u]) if(!vis[v] && !isBridge(u, v))dfs(v);
}
int main()
{int f, t, degOneCt = 0;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> f >> t;edge[f].push_back(t);edge[t].push_back(f);}for(int v = 1; v <= n; ++v)	if(dfn[v] == 0)tarjan(v);for(int v = 1; v <= n; ++v) if(!vis[v]){++en;dfs(v);	}for(int u = 1; u <= n; ++u)for(int v : edge[u]) if(ebc[v] != ebc[u])deg[ebc[v]]++, deg[ebc[u]]++;for(int i = 1; i <= en; ++i)//<u, v>, <v, u>統(tǒng)計(jì)兩次,頂點(diǎn)的度應(yīng)該除以2 deg[i] /= 2;for(int i = 1; i <= en; ++i) if(deg[i] == 1)//統(tǒng)計(jì)度為1的雙連通分量的數(shù)量 degOneCt++;cout << (degOneCt+1)/2;return 0;
}
http://aloenet.com.cn/news/47510.html

相關(guān)文章:

  • 湖南建設(shè)廳網(wǎng)站不良記錄數(shù)據(jù)分析師資格證書怎么考
  • 門戶網(wǎng)站意思種子搜索引擎在線
  • 做網(wǎng)站業(yè)務(wù)員提成幾個(gè)點(diǎn)網(wǎng)絡(luò)營銷的渠道有哪些
  • 建設(shè)網(wǎng)站的目的服裝類鎮(zhèn)江網(wǎng)站定制
  • 蕪湖做網(wǎng)站的鄧健照片企業(yè)培訓(xùn)
  • 做網(wǎng)站的費(fèi)用 可以抵扣嗎網(wǎng)絡(luò)整合營銷4i原則
  • 下載app軟件安裝搜索引擎優(yōu)化公司排行
  • 網(wǎng)站開發(fā)連接形式合肥網(wǎng)站優(yōu)化推廣方案
  • 刪除wordpress站高端營銷型網(wǎng)站
  • 做外貿(mào)網(wǎng)站怎么訪問外國網(wǎng)站成品影視app開發(fā)
  • 網(wǎng)站個(gè)人備案 企業(yè)備案嗎新冠疫情最新情況最新消息
  • wordpress儀表盤訪問不了網(wǎng)站seo視頻
  • 做網(wǎng)站的公司哪好專業(yè)網(wǎng)站優(yōu)化公司
  • 西安網(wǎng)站建設(shè)哪個(gè)平臺(tái)好品牌營銷服務(wù)
  • wordpress卡車主題深圳外貿(mào)seo
  • 網(wǎng)站獨(dú)立ip多代表什么灰色詞快速排名接單
  • 安徽房和城鄉(xiāng)建設(shè)部網(wǎng)站網(wǎng)站優(yōu)化排名技巧
  • 創(chuàng)立制作網(wǎng)站公司國家免費(fèi)培訓(xùn)機(jī)構(gòu)
  • wordpress 導(dǎo)入限制seo sem
  • 關(guān)于優(yōu)化調(diào)整疫情防控相關(guān)措施seo優(yōu)化技術(shù)排名
  • 如何入侵自己做的網(wǎng)站網(wǎng)絡(luò)營銷最基本的應(yīng)用方式是什么
  • 做優(yōu)惠卷網(wǎng)站倒閉了多少錢黃頁引流推廣
  • 自己做網(wǎng)站的優(yōu)勢自己開網(wǎng)站怎么開
  • 新手做網(wǎng)站教程網(wǎng)站seo如何做好優(yōu)化
  • 新手如何做海外網(wǎng)站代購優(yōu)化網(wǎng)絡(luò)的軟件
  • 論文引用網(wǎng)站數(shù)據(jù) 如何做注釋互聯(lián)網(wǎng)銷售公司
  • 網(wǎng)絡(luò)科技公司 網(wǎng)站建設(shè)百度廣告推廣費(fèi)用
  • 北京做網(wǎng)站費(fèi)用深圳全網(wǎng)營銷系統(tǒng)
  • 沈陽微信網(wǎng)站制作價(jià)格廣州seo公司哪個(gè)比較好
  • 網(wǎng)站站內(nèi)推廣計(jì)劃書國外網(wǎng)站搭建