poj 2831 次小生成樹模板

2021-06-23 06:35:57 字數 753 閱讀 3782

/*次小生成樹

題意:給你一些路徑,現在將一部分路徑權值減少後問是否可以替代最小生成樹裡面的邊。

解:次小生成樹,即將這條邊連上,構成乙個環

求出任意兩點路徑之間的除了這條邊的最大值,比較這個最大值》=這條邊,說明可以替換。

prime演算法次小生成樹模板

*/#include#include#define n 1100

#define inf 0x3fffffff

int ma[n][n];

int min(int a,int b)

int max(int a,int b)

struct node bian[n*100];

int maxd[n][n],n;

void prime()

stac[top++]=1;//儲存最小生成樹的點

memset(vis,0,sizeof(vis));

vis[1]=1;

for(i=1;idis[j])

vis[next]=1;

//printf("%d\n",minn);

for(j=0;jma[next][j])

} return ;

}int main()

for(i=0;i=b)//比較即可

printf("yes\n");

else

printf("no\n");}}

return 0;

}

poj2831 樹的直徑 bfs dfs

這裡給出樹的直徑的證明 主要是利用了反證法 假設 s t這條路徑為樹的直徑,或者稱為樹上的最長路 現有結論,從任意一點u出發搜到的最遠的點一定是s t中的一點,然後再從這個最遠點開始搜,就可以搜到另乙個最長路的端點,即用兩遍廣搜就可以找出樹的最長路 證明 1.設u為s t路徑上的一點,結論顯然成立,...

次小生成樹模板

kruskal演算法 關於次小生成樹,首先求出最小生成樹,然後列舉每條不在最小生成樹上的邊 在原本的節點上新增乙個vis屬性進行判斷即可 並把這條邊放到最小生成樹上面,然後就一定會形成環,那麼我們在這條環路中取出一條 除了新加入的那一條邊 最長的路 這裡可以用d u v 來維護 最終得到的權值就是次...

最小生成樹 次小生成樹 模板

次小生成樹我的理解 在最小生成樹的基礎上,列舉不再最小生陳樹上的邊,然後成環,取出一條除了新加入的那條邊外的最長邊,最終的權值即為次小生成樹的權值。小結論 當次小生成樹的權值與最小生成樹的權值相同時,最小生成樹不唯一。include include include includeusing name...