HDU 1879 繼續暢通工程

2021-08-04 06:05:27 字數 1486 閱讀 8028

#include#includeconst int inf = 0x3f3f3f3f;

const int maxn = 1e3;

int fa[maxn];

int mp[maxn][maxn]; // 存圖;

int vis[maxn]; //是否在新圖內;

int dis[maxn]; //第i個頂點到新圖最短距離;

int prim(int n);

int find(int x)

int main ()

for (int i = 0; i < m * (m-1) / 2; i++)

} ans = prim(m);

printf("%d\n",ans); }}

int prim(int n)

} for (int i = 0; i < n; i++) dis[i] = mp[0][i];

for (int i = 0; i < n; i++)

} for (int i = 1; i < n; i++)

}

} }for (int i = 1; i < n; i++)

} if (minn == inf) return ans;

ans += minn; //更新答案;

vis[pos] = 1;

for (int j = 0; j < n; j++)

} for (int i = 1; i < n; i++)

} }}

} return ans;

}

前乙個寫的很複雜,各種合併出錯,每次更新需遍歷整個圖,最初這wa了幾發

//暢通工程修過直接cost為零過

//並不知道之前哪錯了。。。。。。

#include#includeconst int inf = 0x3f3f3f3f;

const int maxn = 1e3;

int fa[maxn];

int mp[maxn][maxn]; // 存圖;

int vis[maxn]; //是否在新圖內;

int dis[maxn]; //第i個頂點到新圖最短距離;

int prim(int n);

int find(int x)

int main ()

for (int i = 0; i < m * (m-1) / 2; i++)

} ans = prim(m);

printf("%d\n",ans); }}

int prim(int n)

} if (minn == inf) return -1;

ans += minn; //更新答案;

vis[pos] = 1;

for (int j = 0; j < n; j++)

} }return ans;

}

繼續暢通工程 hdu 1879

include 2243673 2010 03 24 20 56 41 accepted 1879 375ms 320k 1070 b c 悔惜晟 include 修改了三次終於ac,為何就是 的效率不高 include include using namespace std int s 4991 ...

hdu 1879 繼續暢通工程

include include include typedef structedge edge input 5050 int cost 5050 int parent 5050 int cmp const void a,const void b int root int n int kruskal ...

HDU 1879 繼續暢通工程

和前幾個最小生成樹有點不一樣的地方就是 在kruskal裡面,要先把已經修通的路排在前面 不知道這樣是不是多此一舉呢 再按照每條路的價值從小到大排序 自定義排序規則就是 呼叫c 的sort int cmp const e a,const e b 將每條邊存在結構體edge裡面 struct e ed...