zoukankan      html  css  js  c++  java
  • 186. [USACO Oct08] 牧场旅行

    186. [USACO Oct08] 牧场旅行

    ★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比
    时间限制:1 s   内存限制:128 MB

    n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草。更加自然而方便的是,第i个奶牛就在第i个牧场中吃草。

    其中的一些对牧场被总共的n-1条双向通道的一条连接。奶牛可以通过通道。第i条通道连接的两个牧场是A_i和B_i(1<=A_i<=N;1<=B_i<=N)其长度是L_i(1<=L_i<=10000)。

    通道只会连接两个不同的牧场,所以这些通道使得整个牧场构成了一棵树。

    奶牛们是好交际的希望能够经常的访问别的奶牛。急切地,它们希望你能通过告诉它们Q(1<=Q<=1000)对牧场的路径来帮助他们安排旅行。(这里将有Q个询问,p1,p2(1<=p1<=n;1<=p1<=n))

    分数:200

    问题名称:pwalk

    输入格式:

    • 第1行:两个用空格隔开的整数:n和Q
    • 第2..n行:第i+1行包含三个用空格隔开的整数:A_i,B_i和L_i
    • 第n+1..N+Q行:每行包含两个用空格隔开的整数,代表两个不同的牧场,p1和p2

    输入样例(file pwalk.in):

    4 2

    2 1 2

    4 3 2

    1 4 3

    1 2

    3 2

    输出格式:

    • 第1..Q行:行i包含第i个询问的答案。
       1 #include<iostream>
       2 #include<cstdio>
       3 #include<algorithm>
       4 #include<cstring>
       5 using namespace std;
       6 const int N=1001;
       7 int map[N][N];
       8 int n,q;
       9 const int maxn=999999;
      10 int main()
      11 {
      12     freopen("pwalk.in","r",stdin);
      13     freopen("pwalk.out","w",stdout);
      14     scanf("%d%d",&n,&q);
      15     memset(map,maxn,sizeof(map));
      16     for(int i=1;i<=n-1;i++)
      17      {
      18          int x,y,w;
      19          scanf("%d%d%d",&x,&y,&w);
      20          map[x][y]=w;
      21          map[y][x]=w;
      22      }
      23      for(int k=1;k<=n;k++)
      24       {
      25           for(int i=1;i<=n;i++)
      26            {
      27                for(int j=1;j<=n;j++)
      28                 {
      29                     if(map[i][j]>map[i][k]+map[k][j]&&map[i][j]!=maxn)
      30                      {
      31                          map[i][j]=map[i][k]+map[k][j];
      32                      }
      33                 }
      34            }
      35       }
      36       for(int i=1;i<=q;i++)
      37        {
      38            int x,y;
      39            scanf("%d%d",&x,&y);
      40            printf("%d
      ",map[x][y]);
      41        }
      42        fclose(stdin);
      43        fclose(stdout);
      44     return 0;
      45 }

    输出样例:

    2

    7

    输出说明:

    询问1:牧场1和牧场2的路径长度为2。 询问2:3->4->1->2;总长为7。

    错因:

    freopen中stdin敲错;所以答案全为负数;

    解题思路:弗洛伊德跑所有点

    代码:

  • 相关阅读:
    ASP.NET Core新书终于上市,完成今年一个目标,赠书活动
    .NET 5.0 RC2 发布,正式版即将在 11 月 .NET Conf 大会上发布
    .NET Standard 来日苦短去日长
    [C#.NET 拾遗补漏]09:数据标注与数据校验
    几个超级实用但很少人知道的 VS 技巧[更新]
    .NET 5 中 Target Framework 详解
    .NET 5.0 RC1 发布,离正式版发布仅剩两个版本
    Git 实用操作:撤销 Commit 提交(动图讲解)
    Git 实用操作:重写 Commit 历史
    [C#.NET 拾遗补漏]08:强大的LINQ
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6730693.html
Copyright © 2011-2022 走看看