• USACO-回家


    题目描述

    现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'a'..'z'和'A'..'Y',在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是'Z',注意没有母牛在谷仓中。

    注意'm'和'M'不是同一个牧场 否则错误 上面的意思是说:输入数据中可能会同时存在M,m(郁闷ing)(PS:表郁闷…告诉我set of咋用就不郁闷了…),比如

    M a a m m z

    输入输出格式

    输入格式:

    第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。

    第 2 ..P+1行: 用空格分开的两个字母和一个整数:

    被道路连接牧场的标记和道路的长度(1<=长度<=1000)。

    输出格式:

    单独的一行包含二个项目: 最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。

    输入输出样例

    输入样例#1:

    5
    A d 6
    B d 3
    C e 9
    d Z 8
    e Z 3
    

    输出样例#1:

    B 11
    

    说明

    翻译来自NOCOW

    USACO 2.4


    solution:

    为凑题量刷

    裸的最短路,麻烦的是输入的处理。

    #include<bits/stdc++.h>
    #pragma GCC optimize(3)
    namespace ZDY{
        #define res register
        #define ri res int
        #define ll long long
        #define db double
        #define sht short
        #define il inline
        #define MB template <class T>
        #define Fur(i,x,y) for(ri i=x;i<=y;i++)
        #define fur(i,x,y) for(i=x;i<=y;i++)
        #define Fdr(i,x,y) for(ri i=x;i>=y;i--)
        #define in2(x,y) in(x),in(y)
        #define in3(x,y,z) in2(x,y),in(z)
        #define in4(a,b,c,d) in2(a,b);in2(c,d)
        #define outn(x) out(x),pc('
    ')
        #define clr(x,y) memset(x,y,sizeof(x))
        #define cpy(x,y) memcpy(x,y,sizeof(x))
        #define fl(i,x) for(ri i=head[x],to;to=e[i].to,i;i=e[i].nxt)
        #define inf 2147483630
        #define fin(s) freopen(s".in","r",stdin)
        #define fout(s) freopen(s".out","w",stdin)
        #define gt io.gc()
        #define l2(n) (log(n)/log(2))
        MB il T ABS(T x){return x>0?x:-x;}
        MB il T MAX(T x,T y){return x>y?x:y;}
        MB il T MIN(T x,T y){return x<y?x:y;}
        MB il T GCD(T x,T y){return y?GCD(y,x%y):x;}
        MB il void SWAP(T x,T y){T t=x;y=t;x=y;}
    }using namespace ZDY;using namespace std;
    #define N 55
    int n,m,cnt,d[N],head[N];
    bool v[N];
    struct edge{int to,w,nxt;}e[20001];
    struct cmp{bool operator()(int a,int b){return d[a]>d[b];}};
    priority_queue<int,vector<int>,cmp>q;
    il void add(int x,int y,int w){e[++cnt].to=y;e[cnt].w=w;e[cnt].nxt=head[x];head[x]=cnt;}
    il int id(char c){
        if('A'<=c&&c<='Z')return c-'A'+27;
        return c-'a'+1;
    }
    il void spfa(){
        clr(d,126);
        d[52]=0;q.push(52);
        int x;
        while(!q.empty()){
            v[x=q.top()]=0;q.pop();
            fl(i,x)
            if(d[x]+e[i].w<d[to]){
                d[to]=d[x]+e[i].w;
                if(!v[to])q.push(to),v[to]=1;
            }
        }
    }
    int main(){
        n=52;ios::sync_with_stdio(false);
        cin>>m;
        char x,y;
        int w,ans=0;
        Fur(i,1,m)cin>>x>>y>>w,add(id(x),id(y),w),add(id(y),id(x),w);
        spfa();d[0]=inf;
        Fur(i,27,n-1)if(d[i]<d[ans])ans=i;
        cout<<char(ans-27+'A')<<' '<<d[ans]<<'
    ';
    }
    
  • 相关阅读:
    根据包路径输出类列表
    Logback配置
    接口的幂等性
    mock获取入参数并动态设置返回值
    linux,日志查找技巧
    scrapy 一些坑
    Pyinstaller打包附带DLL、图标和压缩EXE方法
    scrapy 爬虫教程
    买房
    Python: 在CSV文件中写入中文字符
  • 原文地址:https://www.cnblogs.com/mimiorz/p/9757804.html
Copyright © 2020-2023  润新知