zoukankan      html  css  js  c++  java
  • 【DTOJ #1772】运输任务 / 【COCI2011OPEN】RIJEKA

    思路:只需考虑目的地v在出发地u左侧,即u>v的情况。记总共有tot个人的出发地和目的地满足u>v。

    求这些区间[v,u]的并集,因为要尽量减小调头的总距离。答案为$m+cup_{i=1}^{tot} [v_i,u_i]$。

    可以通过合并区间的方式求并集,即将有交的区间合并为一个新的区间。

    注意:

    bool cmp(node x,node y){return x.l<y.l||(x.l==y.l&&x.r<y.r);}
    
    sort(b+1,b+1+t2,cmp);
    d[t4=1]=b[1];
    for(i=2;i<=t2;++i)
    {
    	if (jiao(d[t4],b[i]))
    	{
    		d[t4].r=Max(d[t4].r,b[i].r);
    		d[t4].l=Min(d[t4].l,b[i].l);
    	}
    	else d[++t4]=b[i];
    }
    

    按以上的方法求交集,即排序后将区间从前到后依次合并,需要按左端点排序。按右端点排序,可能出现如下情况:

    |   一   |    |          四         |

        |      二     |        |  三   |

    这些全部可以合并成一个区间,但扫描时,一和二合并,三和四合并,重复统计二和四的交集了。

    如果按右端点排序,则需要从后到前合并。“左前右后”

  • 相关阅读:
    使用PyDNS查询
    C#结构体
    使用CreateProcess函数运行其他程序
    运算符重载
    C#学习抽象类和方法
    sed命令使用
    Python For Delphi 示例
    建立Socket
    使用 lambda 函数
    C#接口实现
  • 原文地址:https://www.cnblogs.com/xzs123456/p/12317775.html
Copyright © 2011-2022 走看看