程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 3072 有向圖縮點成最小樹形圖計算最小權

hdu 3072 有向圖縮點成最小樹形圖計算最小權

編輯:C++入門知識

hdu 3072 有向圖縮點成最小樹形圖計算最小權


題意,從0點出發,遍歷所有點,遍歷邊時候要付出代價,在一個SCC中的邊不要付費。求最小費用。

有向圖縮點(無需建立新圖,,n《=50000,建則超時),遍歷邊,若不在一個SCC中,用一個數組更新記錄最小到達該連通分量的最小邊權即可。。。邊聊天,邊1A,哈哈。。。

#include
#include
#include
#include
#include
using namespace std;
const int inf=0x3f3f3f3f;
const int maxv=50005,maxe=100005;
int nume=0;int head[maxv];int e[maxe][3];
void inline adde(int i,int j,int c)
{
    e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
    e[nume++][2]=c;
}
int dfn[maxv];int low[maxv];int vis[maxv];int ins[maxv]; stacksta;
int scc[maxv];int numb=0;int times=0;
int n,m;
void tarjan(int u)
{
    dfn[u]=low[u]=times++;
    ins[u]=1;
    sta.push(u);
    for(int i=head[u];i!=-1;i=e[i][1])
    {
        int v=e[i][0];
        if(!vis[v])
        {
            vis[v]=1;
            tarjan(v);
            if(low[v]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved