uva10048 floyd或者kruscal

来源:互联网 发布:微信朋友圈网络陷阱 编辑:程序博客网 时间:2024/06/05 03:04
/*题目大意:从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 105using namespace std;const int inf = 0x3f3f3f3f;int map[N][N];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 105using 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[N];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);}}}

0 0
原创粉丝点击