zoukankan      html  css  js  c++  java
  • SPFA cojs 176. [USACO Feb07] 奶牛聚会

    cojs 176. [USACO Feb07] 奶牛聚会

    ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比
    时间限制:3 s   内存限制:16 MB

    N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对农场.通过道路i会花费Ti (1 ≤ Ti ≤ 100)的时间.

    作为参加聚会的奶牛必须走到聚会的所在地(农场X).当聚会结束时,还要返回各自的农场.奶牛都是很懒的,她们想找出花费时间最少的路线.由于道路都是单向的,所有她们前往农场X的路线可能会不同于返程的路线.

    Of all the cows, what is the longest amount of time a cow must spend walking to the party and back? 对于所有参加聚会的奶牛,找出前往聚会和返程花费总时间最多的奶牛,输出这只奶牛花费的总时间.


    输入格式:

    • 第1行:三个用空格隔开的整数.

    第2行到第M+1行,每行三个用空格隔开的整数:Ai, Bi,以及Ti.表示一条道路的起点,终点和需要花费的时间.


    输出格式:

    • 唯一一行:一个整数: 所有参加聚会的奶牛中,需要花费总时间的最大值.

    样例输出:

    4 8 2
    1 2 4
    1 3 2
    1 4 7
    2 1 1
    2 3 5
    3 1 2
    3 4 4
    4 2 3
    

    样例输入:

    10
    

    样例说明:

    共有4只奶牛参加聚会,有8条路,聚会位于第2个农场.

    第4只奶牛可以直接到聚会所在地(花费3时间),然后返程路线经过第1和第3个农场(花费7时间),总共10时间.

      1 #define N 100100
      2 #include<cstring>
      3 #include<iostream>
      4 using namespace std;
      5 #include<cstdio>
      6 int que[10000];
      7 int head1[1001],head2[1001];
      8 struct Edge{
      9     int v,last,w;
     10 }edge1[N],edge2[N];
     11 int t1=0,t2=0,n,m,x;
     12 int dis1[1001],dis2[1001],ans=0;
     13 void add_edge1(int u,int v,int w)
     14 {
     15     ++t1;
     16     edge1[t1].v=v;
     17     edge1[t1].w=w;
     18     edge1[t1].last=head1[u];
     19     head1[u]=t1;
     20 }
     21 void add_edge2(int u,int v,int w)
     22 {
     23     ++t2;
     24     edge2[t2].v=v;
     25     edge2[t2].w=w;
     26     edge2[t2].last=head2[u];
     27     head2[u]=t2;
     28 }
     29 void input()
     30 {
     31     scanf("%d%d%d",&n,&m,&x);
     32     for(int i=1;i<=m;++i)
     33     {
     34         int u,v,w;
     35         scanf("%d%d%d",&u,&v,&w);
     36         add_edge1(u,v,w);
     37         add_edge2(v,u,w);
     38     }
     39 }
     40 void SPFA1()
     41 {
     42     bool flag[1001]={0};
     43     memset(flag,false,sizeof(flag));
     44     int head=0,tail=0;
     45     que[++tail]=x;
     46     flag[x]=true;
     47     memset(dis1,99,sizeof(dis1));
     48     dis1[x]=0;
     49     while(head<tail)
     50     {
     51         ++head;
     52         int p=que[head];
     53         flag[p]=false;
     54         for(int l=head1[p];l;l=edge1[l].last)
     55         {
     56             if(dis1[edge1[l].v]>dis1[p]+edge1[l].w)
     57             {
     58                 dis1[edge1[l].v]=dis1[p]+edge1[l].w;
     59                 if(!flag[edge1[l].v])
     60                 {
     61                     ++tail;
     62                     que[tail]=edge1[l].v;
     63                     flag[edge1[l].v]=true;
     64                 }
     65                 
     66             }
     67         }
     68         
     69     }
     70 }
     71 void SPFA2()
     72 {
     73     bool flag[1001]={0};
     74     memset(flag,false,sizeof(flag));
     75     int head=0,tail=0;
     76     memset(que,0,sizeof(que));
     77     que[++tail]=x;
     78     flag[x]=true;
     79     memset(dis2,99,sizeof(dis2));
     80     dis2[x]=0;
     81     while(head<tail)
     82     {
     83         ++head;
     84         int p=que[head];
     85         flag[p]=false;
     86         for(int l=head2[p];l;l=edge2[l].last)
     87         {
     88             if(dis2[edge2[l].v]>dis2[p]+edge2[l].w)
     89             {
     90                 dis2[edge2[l].v]=dis2[p]+edge2[l].w;
     91                 if(!flag[edge2[l].v])
     92                 {
     93                     ++tail;
     94                     que[tail]=edge2[l].v;
     95                     flag[edge2[l].v]=true;
     96                 }
     97                 
     98             }
     99         }
    100         
    101     }
    102 }
    103 int main()
    104 {
    105     freopen("sparty.in","r",stdin);
    106     freopen("sparty.out","w",stdout);
    107     input();
    108     SPFA1();
    109     SPFA2();
    110     for(int i=1;i<=n;++i)
    111       ans=max(ans,dis1[i]+dis2[i]);
    112     printf("%d
    ",ans);
    113     fclose(stdin);fclose(stdout);
    114     return 0;
    115 }
  • 相关阅读:
    iTerm 2打造ssh完美连接Linux服务器快捷方法
    mac下iterm配色、半透明与样式设置
    python3 django项目从项目中导出依赖包
    Mac OS xshell xftp 替代工具-finalshell
    mac下类似xftp的工具Transmit
    linux安装python3 大型的软件一定要安装在/ opt中 规范
    Linunx创建软连接、删除软连接、修改软连接
    linux Host key verification failed.错误
    Linux各目录及每个目录的详细介绍(转载)
    centos7 安装python3.6.4
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5515488.html
Copyright © 2011-2022 走看看