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 }
  • 相关阅读:
    blktrace分析IO
    Mac-配置SecureCRT
    Mac-安装itellij idea
    Mac-sublime text 3破解版
    Mac-item+zsh
    Mac-安装homebrew
    Mac-装机
    Mac-WIFI总是断网
    Git-ssh登录github
    Git-回滚操作
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5929737.html
Copyright © 2011-2022 走看看