栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3088 Easter Holidays

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3088 Easter Holidays

#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;int N, M, K;struct Edge {    int v, ct, next;}e[1005], re[1005];int idx, ridx, head[1005], rhead[1005];int path[1005];int dis[1005][1005];int rdis[1005][1005];bool vis[1005];void insert(int a, int b, int ct, Edge e[], int head[], int &idx) {    ++idx;    e[idx].v = b, e[idx].ct = ct;    e[idx].next = head[a];    head[a] = idx;}void spfa(int sta, int dis[], Edge e[], int head[], int fn) {    if (fn == 1) {        memset(dis, 0, sizeof (int) * 1005);    } else {        memset(dis, 0x3f, sizeof (int) * 1005);    }    memset(vis, 0, sizeof (vis));    queue<int>q;    dis[sta] = 0;    vis[sta] = true;    q.push(sta);    while (!q.empty()) {        int v = q.front();        q.pop();        vis[v] = false;        for (int i = head[v]; i != -1; i = e[i].next) { if (fn == 1) {      if (dis[e[i].v] < dis[v] + e[i].ct) {         dis[e[i].v] = dis[v] + e[i].ct;         if (!vis[e[i].v]) {  q.push(e[i].v);  vis[e[i].v] = true;         }     } } else {     if (dis[e[i].v] > dis[v] + e[i].ct) {         dis[e[i].v] = dis[v] + e[i].ct;         if (!vis[e[i].v]) {  q.push(e[i].v);  vis[e[i].v] = true;         }     }     }        }    }}void spfa_path(int sta, int dis[], Edge e[], int head[], int fn) {    if (fn == 1) {        memset(dis, 0, sizeof (int) * 1005);    } else {        memset(dis, 0x3f, sizeof (int) * 1005);    }    memset(path, 0xff, sizeof (path));    memset(vis, 0, sizeof (vis));    queue<int>q;    dis[sta] = 0;    vis[sta] = true;    q.push(sta);    while (!q.empty()) {        int v = q.front();        q.pop();        vis[v] = false;        for (int i = head[v]; i != -1; i = e[i].next) { if (fn == 1) {      if (dis[e[i].v] < dis[v] + e[i].ct) {         dis[e[i].v] = dis[v] + e[i].ct;         path[e[i].v] = v;         if (!vis[e[i].v]) {  q.push(e[i].v);  vis[e[i].v] = true;         }     } } else {     if (dis[e[i].v] > dis[v] + e[i].ct) {         dis[e[i].v] = dis[v] + e[i].ct;         path[e[i].v] = v;         if (!vis[e[i].v]) {  q.push(e[i].v);  vis[e[i].v] = true;         }     }     }        }    }    }void prt(int x, int &first) {    if (path[x] != -1) {        prt(path[x], first);        }     if (first) {        printf("%d", x);        first = 0;    } else {        printf(" %d", x);        }}int main() {    int T;    cin >> T;    while (T--) {        idx = ridx = -1;        memset(head, 0xff, sizeof (head));        memset(rhead, 0xff, sizeof (rhead));        int a, b, c;        cin >> N >> M >> K;        for (int i = 0; i < M; ++i) { scanf("%d %d %d", &a, &b, &c); insert(a, b, c, e, head, idx);        }        for (int i = 0; i < K; ++i) { scanf("%d %d %d", &a, &b, &c); insert(a, b, c, re, rhead, ridx);        }        for (int i = 1; i <= N; ++i) { spfa(i, dis[i], e, head, 1);      spfa(i, rdis[i], re, rhead, 2);         }        double Max = 0;        int x, y;         for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) {     if (rdis[j][i] != 0) {         if (1.0*dis[i][j]/rdis[j][i] > Max) {  x = i, y = j;  Max = max(1.0*dis[i][j]/rdis[j][i], Max);         }     } }        }        int first = 1;        spfa_path(y, rdis[x], re, rhead, 2);        prt(path[x], first);        spfa_path(x, dis[x], e, head, 1);        prt(y, first);        printf("n%.3fn", Max);    }    return 0;    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号