zoukankan      html  css  js  c++  java
  • 洛谷P3094 [USACO13DEC]假期计划Vacation Planning

    题目描述

    有N(1 <= N <= 200)个农场,用1..N编号。航空公司计划在农场间建立航线。对于任意一条航线,选择农场1..K中的农场作为枢纽(1 <= K <= 100, K <= N)。

    当前共有M (1 <= M <= 10,000)条单向航线连接这些农场,从农场u_i 到农场 v_i, 将花费 d_i美元。(1 <= d_i <= 1,000,000).

    航空公司最近收到Q (1 <= Q <= 10,000)个单向航行请求。第i个航行请求是从农场a_i到农场 b_i,航行必须经过至少一个枢纽农场(可以是起点或者终点农场),因此可能会多次经过某些农场。

    请计算可行航行请求的数量,及完成所有可行请求的总费用。

    输入输出格式

    输入格式:

    • Line 1: Four integers: N, M, K, and Q.

    • Lines 2..1+M: Line i+1 contains u_i, v_i, and d_i for flight i.

    • Lines 2+M..1+M+Q: Line 1+M+i describes the ith trip in terms of a_i and b_i

    输出格式:

    • Line 1: The number of trips (out of Q) for which a valid route is possible.

    • Line 2: The sum, over all trips for which a valid route is possible, of the minimum possible route cost.

    输入输出样例

    输入样例#1:
    3 3 1 3 
    3 1 10 
    1 3 10 
    1 2 7 
    3 2 
    2 3 
    1 2 
    
    输出样例#1:
    2 
    24 
    

    说明

    There are three farms (numbered 1..3); farm 1 is a hub. There is a $10 flight from farm 3 to farm 1, and so on. We wish to look for trips from farm 3 to farm 2, from 2->3, and from 1->2.

    The trip from 3->2 has only one possible route, of cost 10+7. The trip from 2->3 has no valid route, since there is no flight leaving farm 2. The trip from 1->2 has only one valid route again, of cost 7.

    floyd求出最短路,对于每个询问枚举枢纽找最小花费。

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 const int mxn=300;
     9 int read(){
    10     int x=0,f=1;char ch=getchar();
    11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return x*f;
    14 }
    15 int mp[mxn][mxn];
    16 int n,m,k,Q;
    17 
    18 int main(){
    19     memset(mp,0x3f,sizeof mp);
    20     n=read();m=read();k=read();Q=read();
    21     int i,j;
    22     int u,v,d;
    23     for(i=1;i<=m;i++){
    24         u=read();v=read();d=read();
    25         mp[u][v]=min(mp[u][v],d);
    26     }
    27     for(int e=1;e<=n;e++)
    28      for(i=1;i<=n;i++)
    29       for(j=1;j<=n;j++){
    30           if(i==j)mp[i][j]=0;
    31           else mp[i][j]=min(mp[i][j],mp[i][e]+mp[e][j]);
    32       }
    33     long long ans=0;int cnt=0;
    34     while(Q--){
    35         u=read();v=read();
    36         d=0x3f3f3f3f;
    37         for(i=1;i<=k;i++){
    38             d=min(d,mp[u][i]+mp[i][v]);
    39         }
    40         if(d<0x3f3f3f3f){
    41             cnt++;
    42             ans+=d;
    43         }
    44     }
    45     printf("%d
    %lld
    ",cnt,ans);
    46     return 0;
    47 }
  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5929737.html
Copyright © 2011-2022 走看看