zoukankan      html  css  js  c++  java
  • P1828 香甜的黄油 Sweet Butter

    对于这道洛谷ac而我整了一下午的codevs的题,我也是很绝望啊。

    原因是队列数组开小了我勒个去???我说STL怎么能过

    题目描述

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

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

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

    输入输出格式

    输入格式:

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

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

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    3 4 5
    2
    3
    4
    1 2 1
    1 3 5
    2 3 7
    2 4 3
    3 4 5
    输出样例#1:
    8
     1 #include<iostream>
     2 #include<cstdio> 
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=0x7f;
     6 bool vis[1001];
     7 int map[1001][1001],dis[1001],queue[10001];
     8 int a[1000][1000];
     9 int num[10001],step[1001];
    10 int ranch,n,m,head=0,tail=1;
    11 int ans=0x7fffffff;
    12 int minnow;
    13 void spfa(int x)
    14 {
    15     //memset(vis,0,sizeof(vis));
    16     memset(dis,999999,sizeof(dis));    
    17     vis[x]=1;
    18     dis[x]=0;
    19     queue[head]=x;
    20     while(head!=tail)
    21     {
    22         int now=queue[head];
    23         for(int i=1;i<=step[now];i++)
    24         {
    25             if(dis[a[now][i]]>dis[now]+map[now][a[now][i]])
    26             {
    27                 dis[a[now][i]]=dis[now]+map[now][a[now][i]];
    28                  if(vis[a[now][i]]==0)
    29                 {
    30                     queue[tail++]=a[now][i];
    31                     vis[a[now][i]]=1;
    32                 }
    33             }
    34         }
    35     vis[now]=false;
    36     head++;
    37     }
    38     minnow=0;
    39     for(int i=1;i<=ranch;i++)
    40     {
    41         minnow=minnow+dis[i]*num[i];    
    42     }
    43     if(minnow<ans)
    44     ans=minnow;
    45     head=0;
    46     tail=1;
    47 }
    48 int main()
    49 {
    50     memset(map,999999,sizeof(map));
    51     scanf("%d%d%d",&n,&ranch,&m);
    52     for(int i=1;i<=n;i++)
    53     {
    54         int gs;
    55         scanf("%d",&gs);
    56         num[gs]++;
    57     }
    58     for(int i=1;i<=m;i++)
    59     {
    60         int x,y,len;
    61         scanf("%d%d%d",&x,&y,&len);
    62         map[x][y]=map[y][x]=len;
    63         a[x][++step[x]]=y;
    64         a[y][++step[y]]=x;
    65     }
    66     for(int i=1;i<=ranch;i++)
    67     {
    68         spfa(i);
    69     }
    70     cout<<ans;
    71     return 0;
    72 }
  • 相关阅读:
    Atmel Studio 烧录 Atmega328P(Arduiono)
    JSP内置对象详解及示例
    Hash Map 详细解释及示例
    19年双非学长逆袭985考研经验贴
    camelCase命名规范
    开始我的编程之旅!
    【转】堆和栈的区别
    现场编写类似strstr/strcpy函数
    【转】C++多态篇1一静态联编,动态联编、虚函数与虚函数表vtable
    【转】TCP协议中的三次握手和四次挥手(图解)
  • 原文地址:https://www.cnblogs.com/sssy/p/6690494.html
Copyright © 2011-2022 走看看