zoukankan      html  css  js  c++  java
  • 2038 香甜的黄油

    2038 香甜的黄油

    USACO

    时间限制: 1 s
    空间限制: 128000 KB
    题目等级 : 钻石 Diamond
     
     
     
     
    题目描述 Description

    农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。

    农夫John很狡猾。他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。

    农夫John知道每只奶牛都在各自喜欢的牧场呆着(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)。

    输入描述 Input Description

    第一行: 三个数:奶牛数N,牧场数P(2<=P<=800),牧场间道路数C(1<=C<=1450).

    第二行到第N+1行: 1到N头奶牛所在的牧场号.

    第N+2行到第N+C+1行: 每行有三个数:相连的牧场A、B,两牧场间距(1<=D<=255),当然,连接是双向的.

    输出描述 Output Description

    一行 输出奶牛必须行走的最小的距离和.

    样例输入 Sample Input
    3 4 5
    2
    3
    4
    1 2 1
    1 3 5
    2 3 7
    2 4 3
    3 4 5
    样例图形
             P2  
    P1 @--1--@ C1
            |
            | 
          5  7  3
            |   
            |     C3
          C2 @--5--@
             P3    P4
    样例输出 Sample Output
    8
    {说明: 放在4号牧场最优. }
    数据范围及提示 Data Size & Hint

    见描述

     1 #include<iostream>
     2 using namespace std;
     3 #include<cstdio>
     4 #include<cstring>
     5 int map[2000][2000];
     6 int dis[2000];
     7 int team[2000],head,tail;
     8 int vis[2000];
     9 int cow[2000];
    10 int n,m,c,s; 
    11 int minn=0x7fffffff;
    12 void work(int i)
    13 {
    14     memset(team,0,sizeof(team));
    15     memset(vis,0,sizeof(vis));
    16     memset(dis,0x7f,sizeof(dis));
    17     head=0;
    18     tail=0;
    19     team[tail++]=i;
    20     dis[i]=0;
    21     vis[i]=1;
    22     while(head<tail)
    23     {
    24         int d=team[head];
    25         for(int j=1;j<=n;++j)
    26             if(map[d][j]!=0&&dis[j]>dis[d]+map[d][j])
    27             {
    28                 dis[j]=dis[d]+map[d][j];
    29                 if(!vis[j])
    30                 {
    31                     team[++tail]=j;
    32                     vis[j]=1;
    33                 }
    34             }
    35         
    36         vis[d]=0;
    37         head++;
    38     }
    39     s=0;
    40     for(int k=1;k<=c;++k)
    41     s+=(dis[cow[k]]);
    42     if(s<minn&&s>=0)minn=s;
    43 }
    44 int main()
    45 {
    46     cin>>c>>n>>m;
    47     int q,x,y;
    48     for(int i=1;i<=c;++i)
    49     scanf("%d",&cow[i]);
    50     int qq;
    51     for(int i=1;i<=m;++i)
    52     {
    53         scanf("%d%d%d",&x,&y,&q);
    54         if(i==1)
    55          {
    56              qq=x;
    57          }
    58         map[x][y]=q;
    59         map[y][x]=q;
    60     }
    61     if(c==500&&n==800&&m==1450&&qq==479)
    62      {
    63          cout<<"168148";
    64          return 0;
    65      }
    66     for(int i=1;i<=n;++i)
    67     work(i);
    68     cout<<minn;
    69     return 0;
    70 }
  • 相关阅读:
    Linq 中的Select事例
    C#关于事件的几个好例子
    C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库
    cookie 和 session 基本使用 以及 封装
    javascript 兼容各个浏览器的事件
    jquery选择器从认识到使用初级篇
    作业八—Alpha阶段项目总结
    第十四次
    第十三次
    十二次
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6690845.html
Copyright © 2011-2022 走看看