uva10048 floyd或者kruscal
2017-02-05 14:00
162 查看
/* 题目大意: 从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。若不连通,输出no path 方法1:floyd算法,改变map[i][j]的含义,改变松弛条件: map[i][j] = min(map[i][j], max(map[i][k], map[k][j])); 方法2:kruscal算法,先对边排序,然后从小到大加边。如果start与endd相连,更新ans。 */ /* #include <cstdio> #include <algorithm> #define N 105 using namespace std; const int inf = 0x3f3f3f3f; int map ; int n, m, q; void floyd() { for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (map[i][k] < inf && map[k][j] < inf) map[i][j] = min(map[i][j], max(map[i][k], map[k][j])); } } } } int main() { int cas = 0; while (scanf("%d%d%d", &n, &m, &q) != EOF && (n || m || q)) { if (cas) printf("\n"); printf("Case #%d\n", ++cas); int t1, t2, t3; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i == j) map[i][j] = 0; else map[i][j] = inf; } } for (int i = 1; i <= m; i++) { scanf("%d%d%d", &t1, &t2, &t3); if(map[t1][t2] > t3) map[t1][t2] = map[t2][t1] = t3; } floyd(); int start, endd; while (q--) { scanf("%d%d", &start, &endd); if (map[start][endd] >= inf) printf("no path\n"); else printf("%d\n", map[start][endd]); } } return 0; } */ #include <cstdio> #include <algorithm> #define N 105 using namespace std; const int inf = 0x3f3f3f3f; typedef struct note { int u; int v; int w; }edge; edge e[N * 10]; int n, m, q; int f ; void init() { for (int i = 1; i <= n; i++) f[i] = i; } int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); } int merge(int x, int y) { int t1, t2; t1 = find(x); t2 = find(y); if (t1 != t2) { f[t2] = t1; return 1; } return 0; } int cmp(edge a, edge b) { return a.w < b.w; } int main() { int cas = 0; while (scanf("%d%d%d", &n, &m, &q) != EOF && (n || m || q)) { for (int i = 0; i < m; i++) scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w); sort(e, e + m, cmp); int start, endd, ans; if (cas) printf("\n"); printf("Case #%d\n", ++cas); while (q--) { ans = inf; scanf("%d%d", &start, &endd); init(); for (int i = 0; i < m; i++) { merge(e[i].u, e[i].v); if (find(start) == find(endd)) { ans = e[i].w; break; } } if (ans == inf) printf("no path\n"); else printf("%d\n", ans); } } }
相关文章推荐
- 紫书例题 11-5 Uva 10048 Floyd变形或者Kruskal离线
- uva10048 ( floyd,最大值最小化)
- UVA 10457 ,uva10048 kruskal,最小瓶颈树,floyd
- UVA10048 Floyd最短路径
- uva 10048 Audiophobia floyd的变形
- UVa 10048 噪音恐惧症(Floyd)
- Uva 10048 噪音恐惧症——Floyd变形
- 噪音恐惧症(Audiophobia,UVa10048)——floyd变形,最大最小化
- Uva(10048),最短路Floyd
- 11.3.4-uva10048-floyd变形-两点之间路径上最大边的最小值
- UVa 10048 Audiophobia(最短路&Floyd)
- UVA10048 Audiophobia[Floyd变形]
- Uva - 10048 - Audiophobia(Floyd)
- POJ 3615 Cow Hurdles ,floyd 修改 , UVa 10048 Audiophobia
- UVa 10048 - Audiophobia(Floyd, Kruskal)
- UVa - 10048 - Audiophobia ( Floyd 变形 )
- uva 10048 Audiophobia(floyd)
- UVA 10048 - Audiophobia(floyd)
- Audiophobia - UVa 10048 Floyd
- UVa 10048 Audiophobia【Floyd】