zoukankan      html  css  js  c++  java
  • [spfa]SSL 1693 香甜的黄油

    传送门

    Description

      农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。
      农夫John很狡猾。像以前的Pavlov,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。
      农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)

    题解

    这题其实folyd就可以跑过
    路径都是**双向边!!** 
    所以我们可以处理完一边,再将另一边直接赋值即可
    

    代码

    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int inf=99999999;
    int n,p,c,num[801],d[801][801],ans,u,v,x,sum;
    int main()
    {
        scanf("%d%d%d",&n,&p,&c);
        for (int i=1;i<=p;i++)
            for (int j=1;j<=p;j++)
                if (i==j) d[i][j]=0;
                else d[i][j]=inf;
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            num[x]++;
        }
        for (int i=1;i<=c;i++)
        {
            scanf("%d%d%d",&u,&v,&x);
            d[u][v]=x; d[v][u]=x;
        }
        for (int k=1;k<=p;k++)
            for (int i=1;i<=p;i++)  
                for (int j=1;j<i;j++)
                    if (d[i][j]>d[i][k]+d[k][j])
                    {
                        d[i][j]=d[i][k]+d[k][j];
                        d[j][i]=d[i][j];
                    }
        ans=inf;
        for (int i=1;i<=p;i++)
        {
            int sum=0;
            for (int j=1;j<=p;j++) sum+=d[i][j]*num[j];
            if (ans>sum) ans=sum;
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    收集一些特殊的符号
    腾讯笔试有感
    Lazy Load, 延迟加载图片的 jQuery 插件
    腾讯实习生笔试题
    IE捉迷藏bug详解(躲猫猫)
    使用SQL Server 2000 全文检索
    一篇比较不错的关于masterpage的文章
    ASP.NET中对表单输入行有选择验证
    在WSS中高亮显示搜索结果
    WebPart安装位置对FrontPager的影响
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412249.html
Copyright © 2011-2022 走看看