zoukankan      html  css  js  c++  java
  • C++之路进阶——codevs4416(FFF的后宫)

    4416 FFF 团卧底的后宫

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    你在某日收到了 FFF 团卧底的求助,在他某日旅游回来,他的后宫们出现了一些不可调和的矛盾,如果 FFF 团卧底把自己的宝贝分给 a 号妹子,那么 b 号妹子至少要在站在 a 号妹子的右边距离 d,妹子才愿意得到那个宝贝。可是后宫里也有玩得好的妹子呀,她们总是渴望亲近一点,如果把自己的宝贝分给 a 号妹子,那么与她亲近的妹子与 a 号妹子的距离不会超过 l。现在总共有 n 个妹子,k 个这样的矛盾关系,m 个亲近关系。假设他的宝贝是无限的,保证每一个妹子都有宝贝的情况下,第 n 个妹子和第一个妹子的最远距离是多少呢?

    输入描述 Input Description

    第一行为 n,m,k

    此后 m 行为亲近关系

    此后 k 行为矛盾关系

    输出描述 Output Description

    一行,为最长的距离

    样例输入 Sample Input

    4 2 1

    1 3 100

    2 4 200

    2 3 33

    样例输出 Sample Output

    267

    数据范围及提示 Data Size & Hint

    对于 40%的数据,n<=100

    对于 100%的数据,n<=1000,m<=10000,从 1 开始编号,距离在 int 范围内

    代码:

        

     1 #include<cstdio>
     2 #define INF 0x7fffffff
     3 #define maxn 10000
     4 #include<iostream>
     5 
     6 using namespace std;
     7 
     8 int n,ml,md,cnt=0;
     9 
    10 struct cf
    11    {
    12         int to[maxn],a[maxn],next[maxn],head[maxn],w[maxn],q[maxn*2],tt[maxn];
    13         long long dis[maxn];         
    14         bool vis[maxn];
    15         int insert(int u,int v,int ww)
    16             {
    17                 to[++cnt]=v; next[cnt]=head[u]; head[u]=cnt; w[cnt]=ww;
    18             }
    19         cf()
    20          {
    21               scanf("%d%d%d",&n,&ml,&md);
    22               for (int i=1;i<=ml;i++)
    23                   {
    24                         int u,v,w;
    25                         scanf("%d%d%d",&u,&v,&w);
    26                         insert(u,v,w);
    27                      }        
    28          for (int i=1;i<=md;i++)
    29              {
    30                  int u,v,w;
    31                 scanf("%d%d%d",&u,&v,&w);
    32                 insert(v,u,-w);    
    33                     }                 
    34               for (int i=1;i<=n;i++) dis[i]=0x7fffffff;
    35          }
    36      int spfa()
    37          {
    38              int h=1,t=0;
    39              q[0]=1;
    40              vis[1]=1;
    41              tt[1]++;
    42              dis[1]=0;
    43              while (t<h)
    44                  {
    45                    int now=q[t++];
    46                    for (int i=head[now];i;i=next[i])    
    47                        {
    48                             
    49                            if (dis[to[i]]>dis[now]+w[i])
    50                                 {
    51                                     tt[to[i]]++;
    52                                     if (tt[to[i]]==n+1) return 0;
    53                                     dis[to[i]]=dis[now]+w[i];
    54                                     if (!vis[to[i]])
    55                                        {
    56                                               vis[to[i]]=1;
    57                                               q[h++]=to[i];
    58                                        }
    59                                 } 
    60                        }
    61                   vis[now]=0;       
    62                  }
    63            return 1;         
    64          }     
    65      void print()
    66          {
    67              if(!spfa()) printf("-1");
    68                else if(dis[n]==0x7fffffff) printf("-2");
    69                  else printf("%lld
    ",dis[n]); 
    70             }     
    71          
    72    }cf;
    73 int main()
    74    {
    75         cf.print();
    76         return 0;
    77      }  
  • 相关阅读:
    ASP.NET MVC学习之模型绑定(2)
    ASP.NET MVC学习之模型绑定(1)
    ASP.NET MVC学习之模型模板篇
    ASP.NET MVC学习之视图篇(2)
    ASP.NET MVC学习之视图篇(1)
    C++迭代器的使用和操作总结
    C++ 11 线程调用类的成员函数解决办法
    详解 C++11 lambda表达式
    C++11 学习笔记 std::function和bind绑定器
    C++11中的std::bind
  • 原文地址:https://www.cnblogs.com/grhyxzc/p/5152919.html
Copyright © 2011-2022 走看看