日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU-4081 Qin Shi Huang's Road 8ystem(次小生成树)

發布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU-4081 Qin Shi Huang's Road 8ystem(次小生成树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接
原標題:Qin Shi Huang’s National Road System
CSDN把System設置成非法字符?

題意

NNN個城市每個城市有一定的人口,秦始皇要修地鐵了。他的手下運用魔法之后可以讓一條路的代價為0,秦始皇想知道在那條路上運用魔法可以使得這條路兩端的人口總數修路的花費\frac{這條路兩端的人口總數}{修路的花費}?最大

思路
  • 修路的花費盡量小
  • 選擇路兩端的人口總數盡量大

先求最小生成樹然后判斷每條邊,如果這條邊是最小生成樹上的邊
ans = 最小生數的權值和?這條邊這條邊兩端人口總和\frac{最小生數的權值和-這條邊}{這條邊兩端人口總和}??, 如果這條邊不是最小生成樹上的一條邊,我們需要構造一個次小生成樹,然后類似的求出最大值,中間不斷更新MaxMaxMax即可。

kruskal:kruskal:kruskal218MS 32720K,空間勉強卡過,vectorvectorvector 的內存成倍擴大。。
prim:prim:prim124MS 10268K
29061190 2019-04-26 11:45:53 Accepted 4081 2420 B G++ henuyh

// prim #include <bits/stdc++.h> #define LL long long #define P pair<int, int> #define lowbit(x) (x & -x) #define mem(a, b) memset(a, b, sizeof(a)) #define mid ((l + r) >> 1) #define lc rt<<1 #define rc rt<<1|1 #define endl '\n' const int maxn = 1001; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; using namespace std; int n, m; struct ac{int u, v, w;ac(int u_=0, int v_=0, int w_=0){u = u_; v = v_; w = w_;}inline int Dis(ac x) {return ((x.u-u)*(x.u-u) + (x.v-v)*(x.v-v));} }; int g[maxn][maxn], val[maxn], vis[maxn], dis[maxn]; int pre[maxn], maxd[maxn][maxn]; bool used[maxn][maxn];double Count(int i, int j, double sum) {return (val[i] + val[j]) * 1.0 / (sum - sqrt(g[i][j])); } void prim(int s) {mem(maxd, 0);mem(vis, 0);mem(used, 0);for (int i = 0; i < n; ++i) {dis[i] = g[s][i];pre[i] = s;}vis[s] = 1;double sum = 0;for (int i = 1; i < n; ++i) {int u = -1, MIN = inf;for (int j = 0; j < n; ++j) {if (vis[j]) continue;if (MIN > dis[j]) {MIN = dis[j];u = j;}}if (u == -1) break;vis[u] = 1;sum += sqrt(MIN);used[pre[u]][u] = used[u][pre[u]] = 1;maxd[u][pre[u]] = maxd[pre[u]][u] = MIN;for (int j = 0; j < n; ++j) {if (j == u) continue;if (vis[j]) {maxd[u][j] = maxd[j][u] = max(maxd[pre[u]][j], MIN);}if (vis[j] == 0 && dis[j] > g[u][j]) {dis[j] = g[u][j];pre[j] = u;}} }double ans = 0;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (used[i][j]) ans = max(ans, Count(i, j, sum));else ans = max(ans, Count(i, j, sum - sqrt(maxd[i][j]) + sqrt(g[i][j])));}}printf("%.2lf\n", ans); }int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T;scanf("%d", &T);while (T--) {scanf("%d", &n);vector<ac> t(n);mem(g, inf);for (int i = 0; i < n; ++i) {scanf("%d%d%d", &t[i].u, &t[i].v, &val[i]);}for (int i = 0; i < n; ++i) {for (int j = i+1; j < n; ++j) {g[i][j] = g[j][i] = t[i].Dis(t[j]);}}prim(0);}return 0; } // kruskal #include <bits/stdc++.h> #define LL long long #define P pair<int, int> #define lowbit(x) (x & -x) #define mem(a, b) memset(a, b, sizeof(a)) #define mid ((l + r) >> 1) #define lc rt<<1 #define rc rt<<1|1 #define endl '\n' const int maxn = 1e3 + 1; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; using namespace std; struct ac{int u, v, flag;double w;ac(int u_=0, int v_=0, double w_=0, int flag_=0){u = u_; v = v_; w = w_; flag = flag_;}bool operator <(ac t) {return w < t.w;} }g[1000001]; vector<int> son[maxn]; int pre[maxn], val[maxn]; double dis[maxn][maxn]; int find (int x) {return (pre[x] == x) ? x : pre[x] = find(pre[x]); } int n, m; double Dis(ac x, ac y) {return sqrt((x.u-y.u)*(x.u-y.u) + (x.v-y.v)*(x.v-y.v)); } double Count(double all, ac t) {return (val[t.u] + val[t.v]) * 1.0 / (all - t.w); } void Kruskal() {for (int i = 0; i <= n; ++i) {son[i].clear();son[i].push_back(i);pre[i] = i;}sort(g, g+m);double sum = 0;int cnt = 0;for (int i = 0; i < m; ++i) {if (cnt == n+1) break;int fx = find(g[i].u);int fy = find(g[i].v);if (fx == fy) continue;g[i].flag = 1;sum += g[i].w;cnt++;int lenx = son[fx].size();int leny = son[fy].size();if (lenx < leny) {swap(lenx, leny);swap(fx, fy);}for (int j = 0; j < lenx; ++j) {for (int k = 0; k < leny; ++k) {dis[son[fx][j]][son[fy][k]] = dis[son[fy][k]][son[fx][j]] = g[i].w; }}pre[fy] = fx;for (int j = 0; j < leny; ++j) {son[fx].push_back(son[fy][j]);}son[fy].clear();}double ans = -1;for (int i = 0; i < m; ++i) {if (g[i].flag) {ans = max(ans, Count(sum, g[i]));}else {ans = max(ans, Count(sum + g[i].w - dis[g[i].u][g[i].v], g[i])); }}printf("%.2lf\n", ans); }int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T;scanf("%d", &T);while (T--) {scanf("%d", &n);vector<ac> t(n);for (int i = 0; i < n; ++i) {scanf("%d%d%d", &t[i].u, &t[i].v, &val[i]);}m = 0;for (int i = 0; i < n; ++i) {for (int j = i+1; j < n; ++j) {g[m++] = ac(i, j, Dis(t[i], t[j]), 0);}}Kruskal();}return 0; }

總結

以上是生活随笔為你收集整理的HDU-4081 Qin Shi Huang's Road 8ystem(次小生成树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最好看的2019年中文视频 | 欧美久草视频 | 国产高清视频网站 | 成人激情综合 | 色综合色综合色综合 | 91玖玖| 亚洲黑丝在线 | 亚洲成人mv| 久久青青草原亚洲av无码麻豆 | 极品av在线 | 青娱乐在线视频免费观看 | 高清国产一区二区三区四区五区 | 亚洲图片欧美日韩 | 国产成人精品一区二区在线观看 | 国产伦精品一区二区三区高清版禁 | 精品黄色片 | 久久免费电影 | 欧美成欧美va | 与子敌伦刺激对白播放的优点 | 婷婷综合五月 | 影音先锋中文字幕人妻 | 高清性爱视频 | 黄色录像a | 日韩av一区二区在线 | 中文字幕人乱码中文字 | 7777久久亚洲中文字幕 | 手机看片中文字幕 | 韩国三级做爰高潮 | 亚洲视频一区二区三区在线观看 | 性高潮久久久久久久久久 | a√天堂资源 | 欧美日韩xxxx | 一级黄色av片 | 欧美国产日韩一区 | 制服丝袜天堂 | 性欧美一级 | 女人特黄大aaaaaa大片 | 精品啪啪| 性生交大片免费看3p | 国产女合集 | 日本福利在线观看 | 欧美精品一区二区三区视频 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 麻豆视频免费 | 黄色三级带 | 很黄很黄的网站 | 免费黄色小网站 | 国产精品亚洲一区二区无码 | 中国av一区二区三区 | 中文字幕 日韩 欧美 | 自拍偷拍精品视频 | 一本大道久久a久久精二百 琪琪色在线视频 | 亚洲黄色网址大全 | 国产情侣小视频 | 国产精品伦一区二区三区免费看 | 久久在线电影 | 久久伊人久久 | 天堂国产一区二区三区 | 成人免费无码大片a毛片 | 永久免费未满视频 | 91视频色| 国产一区二区中文字幕 | 在线天堂中文在线资源网 | 色婷婷aⅴ | 日本丰满熟妇videossex一 | 尤物精品视频在线观看 | 看全色黄大色黄大片女一次牛 | 一级黄色片免费观看 | jiz亚洲 | 少妇太爽了太深了太硬了 | 国产精品19乱码一区二区三区 | 美女屁股眼视频免费 | 色婷婷在线视频 | 欧美黑人一级 | 亚洲欧美日韩精品一区 | 秋霞av一区二区三区 | 这里只有久久精品 | 龚玥菲三级露全乳视频 | 亚洲黄色一区 | 成人免费网站在线观看 | 国产主播精品 | 亚洲三区在线 | 欧美日韩视频无码一区二区三 | 国产成人无码精品久久 | 日韩网站免费观看高清 | 人成在线视频 | 噜噜啪啪| 国产精品亚洲综合 | 第一宅男av导航入口 | 第四色视频 | 深爱激情综合网 | 中文字字幕第183页 欧美特级一级片 | 中文字幕二区在线观看 | 你懂的网站在线观看 | 国产爽视频 | 国产一区视频网站 | 国产a视频免费观看 | 高潮无码精品色欲av午夜福利 | 亚洲精品视频在线免费 |