zoukankan      html  css  js  c++  java
  • poj1161

    floyd

    大约是n^3的效率,32ms

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    using namespace std;

    #define maxl 35
    #define maxn 205
    #define maxm 300

    int m, n, l;
    int member[maxl];
    int dist[maxn][maxn];
    int wall[maxm][maxm];
    int map[maxm][maxn];

    void floyd()
    {
    for (int i = 0; i < n; i++)
    dist[i][i]
    = 0;
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    if (dist[j][i] != -1)
    for (int k = 0; k < n; k++)
    if (dist[i][k] != -1 && (dist[j][k] == -1 || dist[j][k] > dist[j][i] + dist[i][k]))
    dist[j][k]
    = dist[j][i] + dist[i][k];
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    scanf("%d%d%d", &n, &m, &l);
    for (int i = 0; i < l; i++)
    scanf(
    "%d", &member[i]);
    memset(dist,
    -1, sizeof(dist));
    memset(wall,
    -1, sizeof(wall));
    for (int i = 0; i < n; i++)
    {
    int a;
    scanf(
    "%d", &a);
    int first, last, now;
    scanf(
    "%d%d", &first, &last);
    if (wall[first][last] != -1)
    dist[i][wall[first][last]]
    = dist[wall[first][last]][i] = 1;
    else
    wall[first][last]
    = wall[last][first] = i;
    map[first][i]
    = true;
    map[last][i]
    = true;
    for (int j = 2; j < a; j++)
    {
    scanf(
    "%d", &now);
    if (wall[now][last] != -1)
    dist[i][wall[now][last]]
    = dist[wall[now][last]][i] = 1;
    else
    wall[now][last]
    = wall[last][now] = i;
    last
    = now;
    map[now][i]
    = true;
    }
    if (wall[first][last] != -1)
    dist[i][wall[first][last]]
    = dist[wall[first][last]][i] = 1;
    else
    wall[first][last]
    = wall[last][first] = i;
    }
    floyd();
    int ans = 0x3f3f3f3f;
    for (int i = 0; i < n; i++)
    {
    int sum = 0;
    for (int j = 0; j < l; j++)
    {
    int x = 0x3f3f3f3f;
    for (int k = 0; k < n; k++)
    if (map[member[j]][k])
    x
    = min(x, dist[k][i]);
    sum
    += x;
    }
    ans
    = min(ans, sum);
    }
    printf(
    "%d\n", ans);
    return 0;
    }
  • 相关阅读:
    Thinkpad R400无线网络一个都不见了!
    如果使用安卓4.4的SD卡?
    如何使用安卓4.4的SD卡?
    在IAR使用FreeRTOS出现Error[Pa045]: function "XXX" has no prototype
    DSP5509的RTC实验-第3篇
    LWM2M简介-学习记录
    DSP5509的定时器实验-第2篇
    DSP5509的XF实验-第一篇
    华为LiteOS系统使用-任务调度函数-第一篇
    2017-12-24自选的股票之春秋航空
  • 原文地址:https://www.cnblogs.com/rainydays/p/2116220.html
Copyright © 2011-2022 走看看