• P1119 灾后重建


    P1119 灾后重建

    提交 24.32k
    通过 8.03k
    时间限制 1.00s
    内存限制 125.00MB
    题目提供者 洛谷
    历史分数100

    提交记录

    标签

     
    查看算法标签
    进入讨论版

    相关讨论

     
    查看讨论

    推荐题目

     
    查看推荐
     

    展开

    题目背景

    BBB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。


    输入输出样例

    输入 #1
    4 5
    1 2 3 4
    0 2 1
    2 3 1
    3 1 2
    2 1 4
    0 3 5
    4
    2 0 2
    0 1 2
    0 1 3
    0 1 4
    输出 #1
    -1
    -1
    5
    4

     思路

      从Floyd中转点的本质入手,利用Floyd本身的动态规划特性处理中转点来更新 dis[i][j] ,数据也确实做到了蓝题的水准。

    CODE

      1 #include <bits/stdc++.h>
      2 #define dbg(x) cout << #x << "=" << x << endl
      3 #define eps 1e-8
      4 #define pi acos(-1.0)
      5 
      6 using namespace std;
      7 typedef long long LL;
      8 
      9 template<class T>inline void read(T &res)
     10 {
     11     char c;T flag=1;
     12     while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
     13     while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
     14 }
     15 
     16 namespace _buff {
     17     const size_t BUFF = 1 << 19;
     18     char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
     19     char getc() {
     20         if (ib == ie) {
     21             ib = ibuf;
     22             ie = ibuf + fread(ibuf, 1, BUFF, stdin);
     23         }
     24         return ib == ie ? -1 : *ib++;
     25     }
     26 }
     27 
     28 int qread() {
     29     using namespace _buff;
     30     int ret = 0;
     31     bool pos = true;
     32     char c = getc();
     33     for (; (c < '0' || c > '9') && c != '-'; c = getc()) {
     34         assert(~c);
     35     }
     36     if (c == '-') {
     37         pos = false;
     38         c = getc();
     39     }
     40     for (; c >= '0' && c <= '9'; c = getc()) {
     41         ret = (ret << 3) + (ret << 1) + (c ^ 48);
     42     }
     43     return pos ? ret : -ret;
     44 }
     45 
     46 const int maxn = 200 + 7;
     47 const int inf  = 0x3f3f3f3f;
     48 
     49 int n,m,s,t;
     50 int dis[maxn][maxn];
     51 int day[maxn];
     52 
     53 void floyd(int k) {
     54     for (int i = 0; i < n; ++i) {
     55         for ( int j = 0; j < n; ++j ) {
     56             if(dis[i][j] > dis[i][k] + dis[k][j]) {
     57                 dis[i][j] = dis[j][i] = dis[i][k] + dis[k][j];
     58             }
     59         }
     60     }    
     61 }
     62 
     63 int main()
     64 {
     65     scanf("%d %d",&n, &m);
     66     for ( int i = 0; i < n; ++i ) {
     67         read(day[i]);
     68     }
     69     int a, b, c;
     70     for(int i = 0; i < n; ++i) {
     71         for (int j = 0; j < n; ++j) {
     72             if(i == j) {
     73                 dis[i][j] = dis[j][i] = 0;
     74             }
     75             else {
     76                 dis[i][j] = dis[j][i] = inf;
     77             }
     78         }
     79     }
     80     for (int i = 1; i <= m; ++i) {
     81         scanf("%d %d %d",&a, &b, &c);
     82         dis[a][b] = dis[b][a] = c;
     83     }
     84     int q;
     85     read(q);
     86     int x, y;
     87     int sum = 0;
     88     for ( int i = 1; i <= q; ++i ) {
     89         scanf("%d %d %d",&x, &y, &t);
     90         if(t < day[x] || t < day[y]) {
     91             puts("-1");
     92         }
     93         else {
     94             while(day[sum] <= t && n > sum) {
     95                 floyd(sum);
     96                 sum++;
     97             }
     98             int ans = dis[x][y];
     99             if(ans == inf) {
    100                 puts("-1");
    101             }
    102             else {
    103                 printf("%d
    ",ans);
    104             }
    105         }
    106     }
    107     return 0;
    108 }
    View Code
  • 相关阅读:
    MYSQL的基本语法
    如何实现SQL Server临时表的创建?
    计算时间 相加,相减 的方法,TimeSpan 数据转换
    sql server 拆分字符串,拆分两次(:和;)
    SQL group by分组查询(转)
    转: sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
    asp.net,CSS设置<TableListView>的title居左,居左,居上
    linq to sql ,将var 类型转为 IList 类型
    Open XML的上传、下载 、删除 ......文件路径
    C#操作office进行Excel图表创建,保存本地,word获取
  • 原文地址:https://www.cnblogs.com/orangeko/p/12329509.html
Copyright © 2020-2023  润新知