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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以Floyd解法為主的練習題六道

?


ZOJ2027-Travelling Fee

?

//可免去一條線路中直接連接兩城市的最大旅行費用,求最小總旅行費用 //Time:0Ms Memory:604K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;#define MAX 205 #define MAXS 12 #define INF 0x3f3f3f3fint n,m; int dis[MAX][MAX]; int high[MAX][MAX]; //該線路中直接連接兩城市的最大旅行費用struct City {char name[MAXS]; }c[MAX];int find(char s[MAXS]) {for (int i = 0; i < n; i++)if (!strcmp(s, c[i].name)) return i;return -1; }void floyd() {for (int k = 0; k < n; k++)for (int i = 0; i < n; i++)for (int j = 0; j < n; j++){if (high[i][k] == -1 || high[k][j] == -1) continue;int maxCost = max(high[i][k], high[k][j]);if (dis[i][j] - high[i][j] > dis[i][k] + dis[k][j] - maxCost){dis[i][j] = dis[i][k] + dis[k][j];high[i][j] = maxCost;}} }int main() {while (scanf("%s%s", c[0].name, c[1].name) != EOF){memset(dis, INF, sizeof(dis));memset(high, -1, sizeof(high));int d; n = 2;char s[MAXS],t[MAXS];scanf("%d", &m);while (m--){scanf("%s%s%d", s, t, &d);int ns = find(s), nt = find(t);if (ns == -1) {memcpy(c[n].name, s, sizeof(s));ns = n++;}if (nt == -1) {memcpy(c[n].name, t, sizeof(t));nt = n++;}high[ns][nt] = dis[ns][nt] = d;}floyd();printf("%d\n", dis[0][1] - high[0][1]);}return 0; }

?

?


?

POJ2253-Frogger

?

?

//求0->1間的最小的最大單次青蛙跳躍距離 //Time:94Ms Memory:508K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std;#define MAX 205 #define POW2(x) ((x)*(x)) #define DIS(a,b) (sqrt(POW2(p[a].x - p[b].x) + POW2(p[a].y - p[b].y)))struct Point {double x, y; }p[MAX];int n; double dis[MAX][MAX]; //兩點間最小的最大一次跳躍距離void floyd() {for (int k = 0; k < n; k++)for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)dis[i][j] = min(dis[i][j], max(dis[i][k], dis[k][j])); }int main() {int cas = 1;while (scanf("%d", &n), n){for (int i = 0; i < n; i++){scanf("%lf%lf", &p[i].x, &p[i].y);for (int j = 0; j < i; j++)dis[i][j] = dis[j][i] = DIS(i, j);dis[i][i] = 0;}floyd();printf("Scenario #%d\n", cas++);printf("Frog Distance = %.3f\n\n", dis[0][1]);}return 0; }

?

?


?

POJ2472-106 miles to Chicago

?

?

//求1到n的最大存活率 //Time:157Ms Memory:264K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;#define MAX 105 int n, m; double dis[MAX][MAX];void floyd() {for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)dis[i][j] = max(dis[i][j], dis[i][k] * dis[k][j]); }int main() {while (scanf("%d%d", &n, &m), n){memset(dis, 0, sizeof(dis));int x, y, d;while (m--) {scanf("%d%d%d", &x, &y, &d);dis[x][y] = dis[y][x] = d / 100.0;}floyd();printf("%.6lf percent\n", 100*dis[1][n]);}return 0; }

?

?


?

POJ1125-Stockbroker Grapevine

?

?

//從某點擴散到所有點的最短時間-求出該點及時間 //Time:0Ms Memory:208K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;#define MAX 105 #define INF 0x3f3f3f3fint n, m; int dis[MAX][MAX]; int time[MAX];void floyd() {for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]); }int main() {while (scanf("%d", &n), n){memset(dis, INF, sizeof(dis));memset(time, 0, sizeof(time));int y, d;for (int x = 1; x <= n; x++){scanf("%d", &m);while (m--) {scanf("%d%d", &y, &d);dis[x][y] = d;dis[x][x] = 0;}}floyd();int Min = INF;int k = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)time[i] = max(time[i], dis[i][j]);for (int i = 1; i <= n; i++){if (Min > time[i]){Min = time[i];k = i;}}if (Min == INF) printf("disjoint\n");else printf("%d %d\n", k, Min);}return 0; }

?

?


?

POJ1603-Risk

?

?

//求依靠攻打接壤國需要最少攻打多少國家才能從起始國家打到終止國家 //Time:0Ms Memory:168K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;#define MAX 21 #define INF 0x3f3f3f3fint n, m; int dis[MAX][MAX];void floyd() {for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]); }int main() {int cas = 0;n = 20;while (scanf("%d", &m) != EOF){memset(dis, INF, sizeof(dis));int x, y;for (x = 1; x <= 19; x++){while (m--) {scanf("%d", &y);dis[x][y] = dis[y][x] = 1;}scanf("%d", &m);}floyd();if (cas) printf("\n");printf("Test Set #%d\n", ++cas);while (m--) {scanf("%d%d", &x, &y);printf("%d to %d: %d\n", x, y, dis[x][y]);}}return 0; }

?

?


?

POJ2607-Fire Station

  這道題稍微比上面的五道題復雜一些

?

//Floyd解法 //已知消防站,現建新消防站,使得所有路口到消防站的最大值減至最小,將最小序列路口輸出 //Time:1797Ms Memory:1164K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;#define MAX 505 #define INF 0x3f3f3f3fint f, n, m; int dis[MAX][MAX]; bool v[MAX]; int md[MAX]; //各路口到消防站最短距離void floyd() {for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]); }int main() {memset(dis, INF, sizeof(dis));memset(md, INF, sizeof(md));scanf("%d%d", &f, &n);int x, y, d;for (int i = 0; i < f;i++){scanf("%d", &x);v[x] = true;dis[x][x] = 0;}while (scanf("%d%d%d", &x, &y, &d) != EOF)dis[x][y] = dis[y][x] = d;floyd();for (int i = 1; i <= n; i++){dis[i][i] = 0;if (!v[i]) continue;for (int j = 1; j <= n; j++)md[j] = min(md[j], dis[i][j]);}int Max = INF, k = 1; //默認為1,否則A不掉(我懷疑數據有問題或題目描述不清)for (int i = 1; i <= n; i++){if (v[i]) continue;int tmp = 0;for (int j = 1; j <= n; j++)tmp = max(tmp, min(md[j], dis[i][j]));if (Max > tmp){Max = tmp;k = i;}}printf("%d\n", k);return 0; }

?

轉載于:https://www.cnblogs.com/Inkblots/p/5499802.html

總結

以上是生活随笔為你收集整理的ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久久亚洲一区二区三区 | 欧美日韩国产免费一区二区三区 | 久久精品99久久久 | 日韩欧美超碰 | 国产真实的和子乱拍在线观看 | 亚洲午夜精品一区二区 | 亚洲男人天堂网站 | 欧美日本另类 | 国产aa毛片| 国产成人精品一区二区三区免费 | 国产精品后入内射日本在线观看 | 91欧美大片| 国产第一页屁屁影院 | 久久艹在线观看 | 久久久久免费观看 | 99热首页 | 国产免费观看视频 | 成人亚洲综合 | 国产精品久久久999 www日本高清视频 | 丁香花高清在线观看完整动漫 | 中文在线观看免费视频 | 特黄三级又爽又粗又大 | 麻豆精品在线 | 另类激情视频 | 91免费在线播放 | 国产精品伦一区 | 天堂免费在线视频 | 正在播放超嫩在线播放 | 欧美精品在欧美一区二区少妇 | 欧美少妇b | 国产免费自拍视频 | 国产精品亚洲а∨天堂免在线 | 亚洲aaaaaa| 一个人免费在线观看视频 | 伊人夜色| 精品国产无码在线观看 | 亚洲国产成人精品激情在线 | 嫩草伊人| 欧美专区视频 | 午夜在线成人 | av在线a | 91成人综合 | 国产成人精品一区二区三区四区 | 欧美xxxx83d | 国产suv精品一区二区33 | 国产精品白嫩极品美女 | exo妈妈mv在线播放免费 | 色一情一伦一子一伦一区 | 一本大道综合伊人精品热热 | 国产精品久久久久aaaa | 久久久久99精品国产片 | 免费看美女隐私网站 | 神马久久久久 | 嫩草综合 | 美国成人av| 久久艹精品 | 女人18毛片一区二区三区 | 后入内射无码人妻一区 | 在线a免费| 97免费观看视频 | 亚洲1024| av无码精品一区二区三区 | 亚洲色图18p | 亚洲成a人片 | 亚洲a成人 | 插插插日日日 | 日日草视频 | 国产精品伦一区二区三级古装电影 | 日日夜夜狠 | 久久婷婷五月综合色国产香蕉 | 92国产精品 | 中国老头性行为xxxx | 中国极品少妇xxxx做受 | 91视频二区 | 欧美午夜性生活 | 91av视频播放 | 久久久久久国产精品一区 | 免费成人一级片 | 中文字幕高清视频 | 欧美国产一区二区 | 波多野吉衣久久 | 欧美色一区二区三区在线观看 | 欧美黄视频在线观看 | 神马午夜场 | 性一交一乱一透一a级 | 日本一区二区免费看 | 性感美女一区二区三区 | 三区在线 | 日本一区二区三区免费在线观看 | 色噜噜狠狠一区二区 | 日韩欧美极品 | 一道本在线视频 | 国产一区在线视频 | 少妇久久久久久 | 久久精品色妇熟妇丰满人妻 | 欧美日韩视频在线播放 | 亚洲成年人网 | 豆花免费跳转入口官网 | 欧美精品日韩在线观看 |